说我想插入名称,地址,城市,州,zip values $ name,$地址等.....

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

谢谢您的帮助。

汤姆

所以如果我有

 $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

怎么办?

有帮助吗?

解决方案

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

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

其他提示

您使用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”的方法。

这应该起作用。

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

但是您真的不再使用MySQL扩展名。看一下 PDO 或者 mysqli 以及他们对“准备好陈述”的支持。

你有几个问题。

首先是您需要分配 array_map() 对于变量,因为它不进行现场转换。然后,您需要将其爆炸回字符串。

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

更大的问题是,您正在手工组装SQL,而不是使用数据访问层,这将使您想要保存的信息并使用其要存储在何处的知识以组装正确的SQL语句,并提供正确的报价和所有。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top