我使用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,这意味着命令执行没有问题。但事实并非如此。
这是某种权限问题吗?我错过了什么?
mysql路径已设置且工作正常。
实际路径为C:\ Users \ Josh \ AppData \ Local \ Temp \ import-1452620686.sql
$ output是一个空数组
答案 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似乎需要该位置..?