Mysql真正的转义字符串循环多个变量

时间:2009-08-09 21:35:59

标签: php variables mysql-real-escape-string

说我要插入名称,地址,城市,州,邮政编码$ name,$ address Etc .....

如何在插入之前对每个变量运行mysql_real_escape_string。必须有一个foreach或循环或while方法而不是写出每个变量吗?

感谢您的帮助。

汤姆

所以,如果我有

 $data = array($address, $city, $name);
 array_map('mysql_real_escape_string', $data);

$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");

我收到了很多错误。

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'root'@'localhost' (using password: NO) in /Users/tommyscott45/Sites/experiment/result.php on line 23
现在怎么样?

4 个答案:

答案 0 :(得分:2)

尝试调用mysql_real_escape_string时发生数据库错误,我发现您正在使用$dbh->exec()来执行查询。这表明您使用PDO连接到数据库,因此您应该使用PDO::quote而不是mysql_real_escape_string

此外,正如其他人已经提到的,解决问题的更好方法是使用准备好的陈述和PDO::prepare

答案 1 :(得分:1)

您使用sprintf。

例如

$query = sprintf("INSERT into 
                  TABLE name = '%s', address = '%s', city = '%s'",
                 mysqli_escape_string($link, $name), 
                 mysqli_escape_string($link, $address), 
                 mysqli_escape_string($link, $city) );

或者这不是你想要的;避免一遍又一遍地输入“mysqli_escape_string”的方法。

答案 2 :(得分:0)

这应该有用。

$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);

但你真的不应该再使用mysql扩展了。请查看PDOmysqli以及他们对“预备陈述”的支持。

答案 3 :(得分:0)

你有几个问题。

首先,您需要将array_map()的输出分配给变量,因为它不进行就地转换。然后你需要将它内爆回一个字符串。

 $data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";

更大的问题是你手工组装SQL而不是使用数据访问层,这将获取你想要保存的信息并使用它关于你想要存储它的位置的知识来组装正确的SQL语句,适当的引用和所有。

顺便提一下,这也是使用预准备语句的建议背后的推动力,但仅使用预准备语句只是解决方案的一半,因为您仍然在组装SQL语句。