web-dev-qa-db-ja.com

PHP execを使用してMySQLexeを呼び出すことはできません

私は簡単なスクリプトを持っています:

<?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
Graviton

解決策を見つけました$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);

?>
1
Graviton

うーん、$ mySQLDirの代わりに$ cmdを実行するべきではありませんか?

編集:$ cmdをエコーし​​てみてください。エラーが表示される可能性があります。

2
Node

コマンドラインのスペースはおそらく区切り文字として扱われているため、実際に実行しようとしています。

_c:\program
_

引数付き:

_files ...
_

exec()に渡されるときに、実行可能パス全体を二重引用符で囲んでみてください。これにより、Windowsシェルはそれが1つのWordであると想定されていることを認識します。

1
Alnitak