Xpleria
Xpleria

Reputation: 5873

PHP - mysql dump doesn't work with symbol in password

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

Answers (3)

XorNut
XorNut

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

Xpleria
Xpleria

Reputation: 5873

Using quotes worked. Thanks +Mubin

 shell_exec("mysqldump --user='$username' --password='$password' --host=$host $databaseName > dump.sql");

Upvotes: 1

Lumbendil
Lumbendil

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

Related Questions