我有一个函数来进行插入查询,但是如果我使用mysqli_real_escape_string
它的值没有响应。这是阵列图中的问题所以我无法弄清楚如何解决这个问题。
服务器版本:5.6.24 - MySQL社区服务器(GPL)
我的功能是:
function insertQryStr($array, $table){
$insertUrl = "insert into %s(%s) values('%s')";
$insertQryStr = sprintf($insertUrl, $table, implode(', ',@array_map('mysql_real_escape_string', @array_keys($array))), implode("', '", @array_map('mysql_escape_string', $array)));
return $insertQryStr;
}
答案 0 :(得分:0)
对array_map
的调用失败,因为mysqli_real_escape_string
用作函数时需要2个参数,第一个参数为mysqli $link
as per the documentation。
array_map
不知道将连接作为第一个参数传递。一个更好的方法是来自this answer。
要在您的函数中使用它,您需要传递一个指向数据库的链接。
function insertQryStr($array, $table, $link) {
array_walk($array, function(&$string) use ($link) {
$string = mysqli_real_escape_string($link, $string);
});
return sprintf("insert into %s (%s) values('%s')",
$table,
implode(", ", array_keys($array)),
implode("', '", $array)
);
}
虽然更好的想法是在之前调用insertQryStr()
以避免tight coupling。
说了这么多,你应该检查并明确使用prepared statements