mysql使用php拆分多查询字符串

时间:2009-03-27 10:40:54

标签: php mysql multi-query

我想创建一个数据库恢复函数,它将解析用phpMyAdmin创建的转储,并将执行所有查询。

我已经有一个MySQL类来执行查询,但它只知道如何进行单个查询。我正在寻找一种将文件内容拆分为单个查询的方法。

我尝试使用preg_split ...但没有设法让它工作。

$queries = preg_split('/[(.+);\s*\n/', $content, -1, PREG_SPLIT_NO_EMPTY);

我对正则表达式不太满意。有没有办法实现我的目标?

3 个答案:

答案 0 :(得分:5)

不要尝试使用正则表达式解析sql。如果sql字符串中有某个;怎么办?

我会尝试http://pear.php.net/package/SQL_Parser或其中任何一个other php mysql parsers。另请参阅此处的PHP MySQL SQL parser (INSERT and UPDATE)

答案 1 :(得分:0)

最终我设法找到了正确的正则表达式:

$queries = preg_split('/[.+;][\s]*\n/', $content, -1, PREG_SPLIT_NO_EMPTY);

它之后将查询拆分;即使查询在多行上传播或查询包含,也不会中断;因为它在一行的末尾查找它。

答案 2 :(得分:0)

我认为在$ content中存储过程,函数或触发器时,上面的注释中的拆分会产生错误的字符串。