Reputation: 5873
I tried the mysqldump
in php
shell_exec("mysqldump --user=$username --password=$password --host=$host $database > dump.sql");
Works fine if password is plain. But when there's a symbol in the password &
in my case, it does't work. Any idea why, or how this can be resolved?
Short answer could be don't put symbols in your password. But that's not the answer I'm looking for and some DB passwords are beyond my reach. So I need a solution or a workaround.
Upvotes: 0
Views: 791
Reputation: 19
If the password contains a '
then --password='$password'
does not work.
The best solution I have found for Windows and Linux is:
if ($isWindows) {
$password = str_replace('"', '\\"', $password);
return " --password=\"$password\"";
} else {
$q = "'";
$password = str_replace("'", "'\\''", $password);
return " --password='$password'";
}
Tested with password []<>(),;:/\| !@#$%^&*()_-+=~?`"'
Updated: escapeshellcmd
does not help, at least on Linux, it adds extra \
, but mysql does not accept such a password.
Upvotes: 0
Reputation: 5873
Using quotes worked. Thanks +Mubin
shell_exec("mysqldump --user='$username' --password='$password' --host=$host $databaseName > dump.sql");
Upvotes: 1
Reputation: 2916
Given that you're using some unknown input, I'd use escapeshellcmd
, which should be able to deal with everything (including having a '
in your password).
Upvotes: 1