2017-01-23 93 views
1

我想做一個mysql轉儲,當數據庫密碼有「(」或「)」或「& 「 在裏面。可能還有更多,但直到現在我已經用這些角色進行了測試。 我的腳本是:phpmysql轉儲不工作,如果密碼有「(」或「)」或「&」

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

如果$通有腳本不工作「),」在裏面。當我從密碼中刪除「)」時,轉儲工作正常,並按照我的需要以sql格式導出數據庫。 我在做什麼錯誤或密碼不應該有這些字符?

+1

不是。但是想一想,如果從命令行輸入這些字符,命令行中的這些字符將會執行什麼操作。 shell正在處理這些字符 – RiggsFolly

+2

引用密碼值:'exec(「mysqldump --user = $ un --password = \」$ pass \「--host = $ hn $ dbn> $ exp」,$ output ,$工作);' –

+0

只要把整個命令用單引號 – fafl

回答

0

如果您的密碼包含可以通過你的shell作爲控制序列被誤解的字符,則需要用引號括值,以確保它們被當作文字

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

請注意,如果您的密碼包含字面引號,那麼你也需要將它們轉義出來