1

I am trying to take mysqldump of database through php, i am able to take database dump through command line this way only.

d:
cd "d:\wamp\bin\mysql\mysql5.5.24\bin"
mysqldump.exe
mysqldump --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"

when trying to execute this command from php this way, i get a empty dump file.

$cmd  = 'd: cd "d:/wamp/bin/mysql/mysql5.5.24/bin"mysqldump.exe>mysqldump --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"';
exec($cmd);

or this way

$cmd  = 'd:/wamp/bin/mysql/mysql5.5.24/bin>mysqldump.exe>mysqldump --user=user --password=password --host=localhost db_name > D:\dump\test.sql';
exec($cmd);

or this way

$cmd  = 'd:/wamp/bin/mysql/mysql5.5.24/bin>mysqldump --user=user --password=password --host=localhost db_name > D:\dump\test.sql';
exec($cmd);

I get only empty dump file. i have gone through a lot of questions here like this, and this and lot more, but none of that solution is working for me.

Please see and suggest any possible way to do it.

Thanks.

Community
  • 1
  • 1

1 Answers1

4

You seems to use Windows, the way to create multi-command lines is to use the '&' operator (more info)

Example :

$cmd  = 'd: & cd "d:/wamp/bin/mysql/mysql5.5.24/bin" & mysqldump.exe --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"';
exec($cmd);

Also, double-check your paths because you are using d:/wamp/... and later D:\dump\test.sql, it seems that your command use slash and antislash and only \ should work.

At last, you can debug your command using a second argument to exec :

$output = array();
exec($cmd, $output);
var_dump($output);
Community
  • 1
  • 1
Alain Tiemblo
  • 36,099
  • 17
  • 121
  • 153
  • wow, that worked, didn't know how to make multi-command, thanks a lot. –  Nov 24 '12 at 08:43
  • also please tell me which is better to use `system($cmd)` or `exec($cmd)`. –  Nov 24 '12 at 08:47
  • You can have a look to [this website](http://chipmunkninja.com/Program-Execution-in-PHP%3A-exec-m@) who gives you nice explainations, or check out [this answer](http://stackoverflow.com/questions/732832/php-exec-vs-system-vs-passthru). – Alain Tiemblo Nov 24 '12 at 08:50
  • if i am using `user=$username` insted if `user=user` its not working, how to make it work with username stored in variable. thanks. –  Nov 24 '12 at 09:10
  • 1
    this way: `...--user='.escapeshellarg($username).' --password='.escapeshelarg...` because your string is between single quotes ([more info](http://stackoverflow.com/questions/3446216/difference-between-single-quote-and-double-quote-string-in-php)). Also note [escapeshellarg](http://uk.php.net/manual/en/function.escapeshellarg.php) used to protect your command against shell code injection. – Alain Tiemblo Nov 24 '12 at 10:14