1. 程式人生 > >代碼收藏系列--php--加載sql文件並解析成數組

代碼收藏系列--php--加載sql文件並解析成數組

存儲過程 exist eat ati body his ble class 註釋

php加載sql文件,解析成以分號分割的數組。(支持存儲過程和函數提取,自動過濾註釋)

/**
 * 加載sql文件為分號分割的數組
 * <br />支持存儲過程和函數提取,自動過濾註釋
 * <br />例如: var_export(load_sql_file(‘mysql_routing_example/fn_cdr_parse_accountcode.sql‘));
 * @param string $path 文件路徑
 * @return boolean|array
 * @since 1.0 <2015-5-27> SoChishun Added.
 
*/ function load_sql_file($path, $fn_splitor = ‘;;‘) { if (!file_exists($path)) { return false; } $lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $aout = false; $str = ‘‘; $skip = false; $fn = false; foreach ($lines as $line) { $line
= trim($line); // 過濾註釋 if (!$line || 0 === strpos($line, ‘--‘) || 0 === strpos($line, ‘*‘) || 0 === strpos($line, ‘/*‘) || (false !== strpos($line, ‘*/‘) && strlen($line) == (strpos($line, ‘*/‘) + 2))) { if (!$skip && 0 === strpos($line, ‘/*‘)) { $skip
= true; } if ($skip && false !== strpos($line, ‘*/‘) && strlen($line) == (strpos($line, ‘*/‘) + 2)) { $skip = false; } continue; } if ($skip) { continue; } // 提取存儲過程和函數 if (0 === strpos($line, ‘DELIMITER ‘ . $fn_splitor)) { $fn = true; continue; } if (0 === strpos($line, ‘DELIMITER ;‘)) { $fn = false; $aout[] = $str; $str = ‘‘; continue; } if ($fn) { $str .= $line . ‘ ‘; continue; } // 提取普通語句 $str .= $line; if (false !== strpos($line, ‘;‘) && strlen($line) == (strpos($line, ‘;‘) + 1)) { $aout[] = $str; $str = ‘‘; } } return $aout; }

版權聲明:本文采用署名-非商業性使用-相同方式共享(CC BY-NC-SA 3.0 CN)國際許可協議進行許可,轉載請註明作者及出處。
本文標題:代碼收藏系列--php--加載sql文件並解析成數組
本文鏈接:http://www.cnblogs.com/sochishun/p/7061588.html
本文作者:SoChishun (郵箱:14507247#qq.com | 博客:http://www.cnblogs.com/sochishun/)
發表日期:2017年6月23日

代碼收藏系列--php--加載sql文件並解析成數組