我使用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是一个空数组
我无法在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);
出于某种原因,将C:\ xampp \ mysql \ bin \ mysql添加到命令的开头解决了我的问题。
我不明白为什么会这样,因为我将C:\ xampp \ mysql \ bin添加到路径系统变量中。当我手动使用命令行时,我可以使用mysql命令,但PHP似乎需要位置..?