当前位置:  开发笔记 > 编程语言 > 正文

PHP:一个mysql_query语句中的多个SQL查询

如何解决《PHP:一个mysql_query语句中的多个SQL查询》经验,为你挑选了2个好方法。

所以我有一个需要使用mysql_query()加载的SQL转储文件.不幸的是,用它执行多个查询是不可能的.

- >不能假设安装了mysql命令行客户端(mysql --help) - 用于直接加载SQL文件

- >不能假设安装了mysqli扩展

/* contents of dump.sql, including comments */
DELETE FROM t3 WHERE body = 'some text; with semicolons; scattered; throughout';
DELETE FROM t2 WHERE name = 'hello';
DELETE FROM t1 WHERE id = 1;

下面的explode()不起作用,因为某些转储内容的值包含分号.

$sql = explode(';', file_get_contents('dump.sql'));
foreach ($sql as $key => $val) {
    mysql_query($val);
}

在不修改转储文件的情况下加载SQL的最佳方法是什么?



1> Bill Karwin..:

您遇到的问题不仅仅是字符串中的分号.

脚本内置命令,无法执行mysql_query(),如USE.

不以分号结尾的语句,如DELIMITER.

包含分号但不在引号内的语句,如CREATE PROCEDURE.

我不知道一个简单的方法来处理这个任务,而不是炮轰到mysql命令行客户端.我意识到你说你不能依赖那个客户端,但没有那个客户端,你需要大量的PHP代码来解析脚本并适当地执行语句.

您可以在phpMyAdmin产品中找到此类代码.但是,该产品是根据GPL许可的,因此如果您使用任何代码,您还必须根据GPL许可您自己的项目.


另见我对这些相关问题的回答:

在PHP中运行MySQL*.sql文件

从PHP中加载.sql文件

是否可以从另一个sql脚本中的存储过程调用sql脚本?



2> Matt..:

奥卡姆的剃刀再次罢工.

上面的explode()函数不起作用,因为值中有分号.但是,我没有意识到(并提及)分号总是在SQL转储文件中的换行符之前.唉,

$sql = explode(";\n", file_get_contents('dump.sql'));
foreach ($sql as $key => $val) {
    mysql_query($val);
}

还有,谢谢你的帮助,比尔.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有