mysqli_real_escape_string 不在内部工作 array_map

mysqli_real_escape_string Not working inside array_map

我有一个插入查询的功能,但是如果我使用 mysqli_real_escape_string 它不会响应值。这是数组映射中的问题,所以我不知道如何解决这个问题。

Server version: 5.6.24 - MySQL Community Server (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;
}

调用 array_map 失败,因为 mysqli_real_escape_string 作为函数使用时需要 2 个参数,第一个是 mysqli $link as per the documentation.

array_map 不知道将连接作为第一个参数传递。更好的方法来自 this answer.

要在您的函数中使用它,您需要将 link 传递给数据库。

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()之前调用insertQryStr()以避免tight coupling.

话虽如此,您应该查看并确定使用 prepared statements

,而不是以这种方式手动转义数据