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

使用 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文件就可以运行了。

我是否遗漏了什么?

编辑:抱歉!信息错误。我已编辑该问题,但仍然有效。

答案1

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

编辑:尝试回显 $cmd 也许您可能会看到错误。

答案2

命令行中的空格可能被视为分隔符,因此它实际上是尝试运行:

c:\program

带有参数:

files ...

尝试将传递给的整个可执行路径括在双引号中exec(),以便 Windows Shell 知道它应该是一个单词。

答案3

我找到了解决方案:您需要明确地将其括$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);

?>

相关内容