就是将一个.sql 文件转成一条条的sql数组,方便在程序中执行sql,虽然功能很是片面,不过刚刚好够用。
以下是代码
/**
* 读取sql文件为数组
* @param $sqlFile sql 文件路径
* @param string $prefix 添加表前缀
* @return array|bool
*/
function get_sql_array($sqlFile, $prefix = '')
{
if (!file_exists($sqlFile)) return false;
$str = file_get_contents($sqlFile);
$str = preg_replace('/(--.*)|(\/\*(.|\s)*?\*\/)|(\n)/', '', $str);
if (!empty($prefix)) {
$str = preg_replace_callback(
"/(TABLE|INSERT\\s+?INTO|UPDATE|DELETE\\s+?FROM|SELECT.+?FROM|LEFT\\s+JOIN|JOIN|LEFT)([\\s]|[\\s`])+?(\\w+)([\\s`]|[\\s(])+?/is",
function ($matches) use ($prefix) {
return str_replace($matches[3], $prefix . $matches[3], $matches[0]);
},
$str);
}
$list = explode(';', trim($str));
foreach ($list as $key => $val) {
if( empty($val) ){
unset($list[$key]);
}else{
$list[$key].=';';
}
}
return array_values($list);
}
主要就是去掉下注释,然后转换成数组形式,还支持在导入SQL的同时加上表前缀。