2016-05-27 3 views
0

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

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

Что _its не ответ с values._ означает ??? –

+2

Вы положили '@' в начале функций. Это оператор подавления ошибок. Возьмите это, и он скажет вам, почему он не работает. – castis

+2

Используйте 'mysqli_' функции, а не' mysql_escape_string' и 'mysql_real_escape_string'. – wogsland

ответ

0

Вызов array_map терпит неудачу, потому что mysqli_real_escape_string при использовании в качестве функция требует 2 аргумента, первая из которых - mysqli $linkas 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

+0

Как я могу использовать 'array_walk' в моей функции? –

+0

Предупреждение: array_map() ожидает как минимум 2 параметра, 1 задан ... –

+0

замечательный, он работает .. Большое спасибо –

Смежные вопросы