因此,我有一个需要使用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的最佳方法是什么?
您有更多的问题案例,而不仅仅是字符串中的分号。
mysql_query()
,例如USE
。DELIMITER
。CREATE PROCEDURE
。我不知道在不使用mysql命令行客户端的情况下处理此任务的简便方法。我意识到您说您不能依靠该客户端,但是如果没有该客户端,则需要大量的PHP代码来解析脚本并适当地执行语句。
您也许可以在phpMyAdmin产品中找到这样的代码。但是,该产品是根据GPL许可的,因此,如果您使用任何代码,则还必须根据GPL许可自己的项目。
另请参阅我对以下相关问题的回答:
问题内容: 说我想做,如何在同一个mysql_query()中做它们? 编辑: 由于这个问题有很多看法,我想指出,自PHP 5.5起,其他功能现在已被弃用,不应使用。 问题答案: 我从来没有尝试过,但是我认为您可以使用mysqli :: multi_query 。拒绝多条语句的好处之一是,它可以立即排除一些更常见的SQL注入攻击,例如添加一条语句。因此,您可能需要注意多个语句。
问题内容: 如何将这些多个查询合并为一个(可以吗?) 顺便问一下,如果在完成所有查询后再执行mysql_close($ db),那会更好吗? 问题答案: 传递到作为第五个参数。 例: 当您使用mysql_fetch_ *或mysql_num_rows或mysql_affected_rows时,仅第一条语句有效。 例如,以下代码,第一个语句为INSERT,则无法执行mysql_num_rows和my
问题内容: 我正在尝试使用ADO一次在MS Access中创建多个表。是否可以在一个操作中执行多个语句?例如: 尽管每个create语句都可以完美地独立工作,但由于导致此操作失败。有没有办法做这种事情?也将有添加约束,添加索引等的语句,我真的很希望能够做到这一点,这样我就不必将字符串分成单独的部分。 问题答案: ADO to MS Access不支持批处理SQL语句。您需要将每个语句作为单独的执行
我想知道是否可以在一个准备好的语句中执行多个SQL查询。这是我要执行的第一个查询:
问题内容: 这合法吗? 问题答案: 对于它的价值,并取决于是否将相同的数据插入到相同的表中,最好用一个插入插入多个值, 例如
问题内容: 因此,这不适用于mysql_query。 我严格使用c ++,并且我没有使用php。 我希望执行此双重查询,以便在由并发用户创建ID的交易系统中,我将始终具有唯一ID。 它可以完美地在MySql数据库中运行,但是我需要将其添加到Eclipse(我正在使用Ubuntu 12.04 LTS)。 我的应用程序很大,如果可能的话,我不想更改为mysqli,但是如果没有其他方法,那就可以了。 你