1

假设我想插入姓名、地址、城市、州、邮编值 $name、$address 等.....

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

4 回答 4

2

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

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

于 2009-08-09T23:04:50.260 回答
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”的方法。

于 2009-08-09T21:45:37.673 回答
0

这应该有效。

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

但是你真的不应该再使用 mysql 扩展了。查看PDOmysqli以及它们对“准备好的语句”的支持。

于 2009-08-09T22:10:42.177 回答
0

你有几个问题。

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

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

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

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

于 2009-08-09T23:11:14.647 回答