如果密码有“(”或“)”或“&”,则phpmysql转储无效

时间:2017-01-23 10:08:59

标签: php mysql exec

我正在尝试进行mysql转储,当数据库密码有“(”或“)”或“&”时我遇到问题在里面。可能还有更多,但到目前为止我已经测试了这些角色。 我的剧本是:

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

如果$ pass中包含“)”,则脚本不起作用。当我从密码中删除“)”时,转储工作正常,并按我想要的sql格式导出数据库。 我有什么错误或密码不应该有这些字符吗?

1 个答案:

答案 0 :(得分:0)

如果您的密码包含可能被shell误解为控制序列的字符,那么您需要将值包装在引号中以确保它们被视为文字

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

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