我正在阅读.sql
文件,我的要求是读取文件并从INSERT
文件中获取.sql
查询,当我使用正则表达式时,它只返回查询的一半不是列值可能是因为新行。
返回值:
Array ([0] => INSERT INTO `projects` (`id`, `project`) VALUES )
我的代码:
$sql_file_path = '/var/www/html/table.sql';
$fh = fopen($sql_file_path, 'r') or die($php_errormsg);
$pattern = "/INSERT INTO/";
while (!feof($fh))
{
$line = fgets($fh, 4096);
if (preg_match($pattern, $line))
{
$ora_books[] = $line;
}
}
fclose($fh);
echo '<pre>';
print_r($ora_books);
请帮我创建正则表达式,该表达式也会读取包含列值的所有插入查询。
感谢。
答案 0 :(得分:0)
是的,fgets会给你一行,所以如果查询跨越行,这将无效。只需匹配整个文件,使用echo ''.$start.' hello '.End.'';
作为模式,将第三个参数(数组)提供给preg_match,然后您将获得该数组中的所有查询。
我必须看到文件生成确切的模式 - 如果你在insert语句中有分号,找到一些标记insert语句结束的东西,例如/INSERT INTO[^;]+/