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()
чтобы избежать плотного сцепления.
Сказав все это, вместо того, чтобы вручную экранировать данные таким образом, вы должны проверить и обязательно использовать подготовленные заявления