【问题标题】:Php exec() with mysql import not workingmysql导入的php exec()不起作用
【发布时间】:2016-04-17 11:03:09
【问题描述】:

我正在使用 php exec() 导入上传的 sql 文件。

$cmd = "mysql -h localhost -u forum_user --password=1234 import_forum < C:\Users\Josh\AppData\Local\Temp\import-1452620686.sql"
exec($cmd, $output, $worked);
return $worked;

问题是,它实际上并没有执行任何东西,因为没有任何东西被导入到数据库中。但是,如果我将此命令复制并粘贴到终端中,它会很好地导入。

这似乎是我的 windows 机器本地的一个问题,因为脚本在我们的 linux 环境中运行良好。

另外,$worked 变量返回为 1,这应该意味着命令执行没有问题。但事实并非如此。

这是某种权限问题吗?我错过了什么?

编辑 1

mysql 路径已设置并正常工作。

编辑 2

实际路径为 C:\Users\Josh\AppData\Local\Temp\import-1452620686.sql

编辑 3

$output 是一个空数组

【问题讨论】:

  • 这是 mysql -h localhost -u forum_user --password=1234 import_forum
  • 不知道真正的路径,但\t 是制表符转义序列,所以我猜你的 Windows 路径分隔符没有被转义。
  • 尝试运行 mysql -h localhost -u forum_user --password=1234 import_forum
  • 您使用的是哪个版本的 xampp、wamp 或 php?
  • 在文件路径中,尝试将每个反斜杠加倍,例如。 C:\\Users\\path\\to\\file.sql

标签: php mysql windows shell command


【解决方案1】:

我在 stackoverflow 上真的找不到明确的答案,所以这里是我从各种来源拼凑起来的所有信息,以使其最终起作用,希望它能节省一些时间。 这是一些使用 php exec 执行 mysql 导入并为 sql 导入文件名传递变量的代码。这是在 WAMP 服务器上的 Windows 7 下运行的。 注意 mysql 路径的反斜杠(不同版本的 WAMP 的路径会有所不同)和 sql 导入文件路径的正斜杠。引号内的命令周围还有括号,以获取消息输出的重定向。 最后是输出“2>&1”的重定向。


    $sqlFile='sqlfile.sql';
    $cmd="(C:\wamp64\bin\mysql\mysql5.7.14\bin\mysql --user=USER --password=PASSWORD --host=localhost --database db1 db2 < C:/wamp64/www/site/$sqlFile) 2>&1";
    exec($cmd, $output, $return_var);

    var_dump($return_var);
    echo "return_var is: $return_var" . "\n";
    var_dump($output);

【讨论】:

    【解决方案2】:

    由于某种原因,将 C:\xampp\mysql\bin\mysql 添加到命令的开头解决了我的问题。

    我不明白为什么会这样,因为我将 C:\xampp\mysql\bin 添加到路径系统变量中。当我手动使用命令行时,我可以很好地使用mysql命令,但是PHP似乎需要该位置..?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多