mysqli_real_escape_string Не работает внутри array_map

У меня есть функция для выполнения запроса вставки, но если я использую mysqli_real_escape_string это не ответ со значениями. Это проблема внутри карты массива, поэтому я не могу понять, как это решить.

Версия сервера: 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;
}

1 ответ

Решение

Призыв к array_map терпит неудачу, потому что mysqli_real_escape_string при использовании в качестве функции требуется 2 аргумента, первый mysqli $link согласно документации.

array_map не знает, чтобы передать соединение в качестве первого аргумента. Лучший способ был бы из этого ответа.

Чтобы использовать это с вашей функцией, вам нужно передать ссылку на базу данных.

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() чтобы избежать плотного сцепления.

Сказав все это, вместо того, чтобы вручную экранировать данные таким образом, вы должны проверить и обязательно использовать подготовленные заявления

Другие вопросы по тегам