Php exec()与mysql导入无法正常工作

时间:2016-01-12 17:38:48

标签: php mysql windows shell command

我使用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环境中运行良好。

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

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

编辑1

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

编辑2

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

编辑3

$ output是一个空数组

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

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