【问题标题】:How do I use PHP to execute a SQL file in batch that contains thousands of statements?如何使用 PHP 批量执行包含数千条语句的 SQL 文件?
【发布时间】:2018-11-19 22:16:26
【问题描述】:

我有一个.sql 文件,其中包含一些TRUNCATEDROP TABLE IF EXISTSCREATE TABLE 语句以及数千个INSERTUPDATE 语句。

我正在尝试使用PHP批量执行文件中的所有语句如下:

$sql = file_get_contents('path/to/sql/file.sql');
$link->($sql);

$link 是一个有效的 MySQLi 数据库链接。我也尝试将$link->($sql) 换成$link->multi_query($sql),但似乎都不起作用。

如果有什么不同,我会尝试在 Windows 10 上的 XAMPP localhost 环境中使用 PHP 7.1 和 MariaDB 15.1 执行此操作。

有谁知道为什么这会导致问题并且不起作用?
在 PHP 中执行包含数千条语句的 SQL 文件的最佳方法是什么?
谢谢。

【问题讨论】:

  • 请添加正在显示的错误
  • 我用这个。这只是我为我准备的东西。有用。您至少可以看到这些命令在 Windows 上是如何工作的。 :) 是的,它作为我的单元测试的一部分运行。我用它来设置数据库。 pastebin.com/wWjfsYCQ
  • 我明白了,@RyanVincent。基本上,您必须使用 PHP 中的 exec 函数来运行带有某些选项的 mysql 命令。这就说得通了。非常感谢。如果 MySQL 和 Apache/PHP 安装在不同的服务器上,有没有办法做到这一点?谢谢。

标签: php sql xampp mysqli-multi-query


【解决方案1】:

Ryan,再次感谢您的建议。正如您所建议的,直接在 SQL 文件上运行 mysql 命令是可行的方法。

以下内容对我有用:

shell_exec('C:\\xampp\\mysql\\bin\\mysql.exe -h localhost -u root -ppassword -D db-name "SELECT * FROM table-name;"');

请注意,您不希望在-p 选项和密码本身之间有空格。如果您没有密码,则完全删除 -p 选项。

编辑:上面的示例命令是一个非常随意的命令,用于演示运行mysql 命令。如果你想读取并执行一个文件中的一堆 SQL 语句,你更需要以下内容:

shell_exec('C:\\xampp\\mysql\\bin\\mysql.exe -h localhost -u root -ppassword -D db-name < C:\\xampp\\htdocs\\path\\to\\file.sql');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2016-07-24
    • 2012-02-26
    • 2015-10-31
    • 2022-06-14
    相关资源
    最近更新 更多