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

问题描述 投票:0回答:2

我使用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,这意味着命令执行没有问题。但事实并非如此。

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

Edit 1

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

Edit 2

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

Edit 3

$ output是一个空数组

php mysql windows shell command
2个回答
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);

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.