2017-01-23 77 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); 

请注意,如果您的密码包含字面引号,那么你也需要将它们转义出来