mysqli_real_escape_string在array_map中不起作用

时间:2016-05-27 18:58:18

标签: php mysql mysqli array-map

我有一个函数来进行插入查询,但是如果我使用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;
}

1 个答案:

答案 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