2017-01-23 3 views
1

Ich versuche, einen MySQL-Dump zu tun und ich habe Probleme, wenn das Datenbankpasswort entweder "(" oder ")" oder "& " drin. Es kann mehr geben, aber bis jetzt habe ich mit diesen Charakteren getestet. Mein Skript ist:phpmysql Dump funktioniert nicht, wenn das Passwort "(" oder ")" oder "&"

$un = "user_name_here"; 
$pass = "gTbK5AQ)iuT"; 
$hn = "localhost"; 
$dbn = "database_name_here"; 
$exp = "export_path_here"; 
$output = array(); 
exec("mysqldump --user=$un --password=$pass --host=$hn $dbn > $exp", $output, $worked); 

Das Skript funktioniert nicht, wenn der $ Pass hat ")" in ihm. Wenn ich ")" aus dem Passwort entferne, dann funktioniert der Dump einwandfrei und exportiert die Datenbank im SQL-Format wie ich will. Gibt es einen Fehler, den ich mache oder das Passwort sollte diese Zeichen nicht haben?

+1

Nein. Aber darüber nachdenken, was diese Zeichen in einer Befehlszeile platziert würde tun würde, wenn Sie sie von der Befehlszeile aus eingegeben. Die Shell tut etwas mit diesen Zeichen – RiggsFolly

+2

Zitiere das Passwort Wert: 'exec (" mysqldump --user = $ un --password = \ "$ pass \" --host = $ hn $ dbn> $ exp ", $ output , $ arbeitete); ' –

+0

Einfach den gesamten Befehl in einfache Anführungszeichen setzen – fafl

Antwort

0

Wenn Sie Ihr Passwort Zeichen enthält, die von der Shell als Kontrollsequenzen falsch interpretiert werden kann, dann müssen Sie den Wert in Anführungszeichen wickeln, um sicherzustellen, dass sie als Literale

exec("mysqldump --user=$un --password=\"$pass\" --host=$hn $dbn > $exp", $output, $worked); 

Hinweis behandelt werden, dass, wenn Sie Ihr Passwort enthält Literale Anführungszeichen, dann müssen Sie ihnen auch entkommen

Verwandte Themen