使用PHP exec调用MySQL exe不起作用

我有一个简单的脚本:

<?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $db = 'BPOJob'; $file =dirname(__FILE__).'\\'.'job_create.sql'; $mySQLDir='"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe"'; $cmd = $mySQLDir.' -h '.$dbhost.' --user='.$dbuser.' --password='.$dbpass.' < "'.$file.'"'; exec($cmd,$out,$retval); echo "\n"; echo ($retval); ?> 

事情是当我在PHP.exe中运行上述命令,它不起作用; 我从exec获得了1作为返回值。

但是如果我通过调用直接运行命令行

 mysql.exe -h localhost --user=admin --password=password < job_create.sql 

然后.sql文件可以运行。

有什么我想念的吗?

编辑:对不起! 错误的信息。 我编辑了这个问题,它仍然有效。

嗯,你不应该执行$ cmd而不是$ mySQLDir?

编辑:尝试echo $ cmd也许你可以看到一个错误。

命令行中的空格可能被视为分隔符,所以它实际上正在尝试运行:

 c:\program 

有参数:

 files ... 

尝试使用双引号括住整个可执行文件path,因为它传递给exec() ,所以windows shell知道它应该是一个单词。

我find了解决办法 :你需要明确地将$cmd括在引号中:

  exec('"'.$cmd.'"',$out ,$retval); 

这是完整的脚本,供您参考:

 <?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $db = 'BPOJob'; $file =dirname(__FILE__).'\\'.'job_create.sql'; $mySQLDir='"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe"'; $cmd = $mySQLDir.' -h '.$dbhost.' --user='.$dbuser.' --password='.$dbpass.' < "'.$file.'"'; exec('"'.$cmd.'"',$out,$retval); echo "\n"; echo ($retval); ?>