Вопрос

Скажем, я хочу вставить в имя, адрес, город, государство, 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» снова и снова.

Это должно работать.

$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);

Но вы действительно не должны больше использовать расширение MySQL. Посмотри на КПД или же mysqli и их поддержка «подготовленных заявлений».

У вас есть несколько проблем.

Во -первых, вам нужно назначить выход array_map() к переменной, поскольку она не делает преобразование на месте. Тогда вам нужно взорвать его обратно к строке.

 $data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";

Большая проблема заключается в том, что вы собираете SQL вручную вместо использования уровня доступа к данным, который будет получать информацию, которую вы хотите сохранить, и использовать его знания о том, где вы хотите сохранить его для сборки правильного оператора SQL, с правильным цитированием и все.

Это также является стимулом, стоящим за предложениями для использования подготовленных заявлений, кстати, но просто использование подготовленных операторов - это только половина решения, потому что вы все равно будете собирать операторы SQL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top