我还没有学会如何使用参数化查询(根据本网站上的其他一些帖子,明天上午我绝对需要做的事情),我想把表单数据搞砸到查询中逃脱了。
两次,我遇到过这个解决方案:
$_POST = array_map('mysqli_real_escape_string', $_POST);
根据我的判断,这可以通过escape函数运行$ _POST数组中的所有变量。我已经看到完全行被upvoted,但当我将它添加到我现有的PHP时,它会创建一堆空白值。
我的印象是mysqli_real_escape_string需要第二个参数 - 链接/连接。这是什么导致了我的问题?如果删除该行并且我的变量从$ _POST获取未转义的值,数据在数据库中就可以了。
答案 0 :(得分:3)
array_map
返回新数组,如果您覆盖$_POST
,更好的解决方案是使用array_walk
。
array_walk($_POST, function(&$string) use ($link) {
$string = mysqli_real_escape_string($link, $string);
});
请注意,$link
必须是有效的连接。
Function [ <internal:mysqli> function mysqli_real_escape_string ] {
- Parameters [2] {
Parameter #0 [ <required> $link ]
Parameter #1 [ <required> $string_to_escape ]
}
}
答案 1 :(得分:1)
您必须将转义的值传递给另一个变量:
$post = array_map('mysqli_real_escape_string', $_POST);
或者:
foreach($_POST as $k => $v) {
$_POST[$k] = mysqli_real_escape_string($v);
}
注意:除非引用了数组,否则foreach将对指定数组的副本进行操作,而不是数组本身。
答案 2 :(得分:0)
然后是的,这是你的答案:
mysql_real_escape_string()
需要连接数据库,因为它使用数据库的字符集来确定需要转义的内容。
没有这个,PHP不知道你正在使用什么字符集,所以要逃避什么。
有很多:
http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
并且所有人都有不同的角色。