MySQL Real Escape String Loop несколько переменных
-
12-09-2019 - |
Вопрос
Скажем, я хочу вставить в имя, адрес, город, государство, Zip значения $ name, $ address и т. Д.
Как я могу бежать mysql_real_escape_string
на каждой из переменных перед вставкой. Должен быть фон или цикл или в то время как метод вместо того, чтобы записывать каждую переменную, верно?
Спасибо за помощь.
Том
Так что, если у меня есть
$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);
а также
$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");
Я получаю тонну ошибок.
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'root'@'localhost' (using password: NO) in /Users/tommyscott45/Sites/experiment/result.php on line 23
что теперь?
Решение
При попытке вызвать ошибку базы данных произошла mysql_real_escape_string
И я вижу, что вы используете $dbh->exec()
Чтобы выполнить запрос. Это говорит о том, чтобы вы подключались к базе данных с помощью PDO, поэтому вы предпочитаете использовать PDO::quote
вместо mysql_real_escape_string
.
Более того, как уже упоминалось другие, лучшим способом решения вашей проблемы будет использование подготовленных заявлений и PDO::prepare
.
Другие советы
Вы используете Sprintf.
Например
$query = sprintf("INSERT into
TABLE name = '%s', address = '%s', city = '%s'",
mysqli_escape_string($link, $name),
mysqli_escape_string($link, $address),
mysqli_escape_string($link, $city) );
Или это не совсем то, что вы искали; Способ не набирать «mysqli_escape_string» снова и снова.
У вас есть несколько проблем.
Во -первых, вам нужно назначить выход array_map()
к переменной, поскольку она не делает преобразование на месте. Тогда вам нужно взорвать его обратно к строке.
$data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";
Большая проблема заключается в том, что вы собираете SQL вручную вместо использования уровня доступа к данным, который будет получать информацию, которую вы хотите сохранить, и использовать его знания о том, где вы хотите сохранить его для сборки правильного оператора SQL, с правильным цитированием и все.
Это также является стимулом, стоящим за предложениями для использования подготовленных заявлений, кстати, но просто использование подготовленных операторов - это только половина решения, потому что вы все равно будете собирать операторы SQL.