Chamar o MySQL exe usando PHP exec não funciona

1

Eu tenho um script simples:

<?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);

?>

A coisa é quando eu executo o comando acima no PHP.exe, ele não funciona; Eu tenho um 1 como um valor de retorno do exec.

Mas se eu executar a linha de comando diretamente chamando

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

Em seguida, o arquivo .sql pode ser executado.

Há alguma coisa que eu sinto falta?

Edit: Desculpe! Informação errada. Eu editei a questão e ainda é válida.

    
por Graviton 02.05.2009 / 13:06

3 respostas

1

Eu encontrei a solução : você precisa incluir explicitamente o $cmd na citação:

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

Este é o script completo, para sua referência:

<?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);

?>
    
por 02.05.2009 / 14:24
2

Hm, você não deveria executar $ cmd em vez de $ mySQLDir?

EDIT: Tente ecoar $ cmd talvez você possa ver um erro.

    
por 02.05.2009 / 13:20
1

Os espaços na linha de comando provavelmente estão sendo tratados como separadores, então, na verdade, ele está tentando ser executado:

c:\program

com argumentos:

files ...

Tente colocar todo o caminho do executável entre aspas duplas à medida que é passado para exec() , para que o shell do Windows saiba que é uma palavra que deve ser usada.

    
por 02.05.2009 / 13:33

Tags