Mysql реальный escape-цикл цикла нескольких переменных - PullRequest
1 голос
/ 10 августа 2009

Скажем, я хочу вставить в имя, адрес, город, штат, почтовые значения $ name, $ address Etc .....

Как мне запустить mysql_real_escape_string для каждой из переменных перед вставкой. Должен быть метод foreach или loop или while вместо записи каждой переменной, верно?

Спасибо за помощь.

Том

так что если у меня есть

 $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

что теперь?

Ответы [ 4 ]

2 голосов
/ 10 августа 2009

Произошла ошибка базы данных при попытке вызвать mysql_real_escape_string, и я вижу, что вы используете $dbh->exec() для выполнения запроса. Это предполагает, что вы подключаетесь к базе данных с помощью PDO, поэтому вам лучше использовать PDO::quote вместо mysql_real_escape_string.

Более того, как уже упоминали другие, лучшим способом решения вашей проблемы было бы использование подготовленных заявлений и PDO::prepare.

1 голос
/ 10 августа 2009

Вы используете 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» снова и снова.

0 голосов
/ 10 августа 2009

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

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

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

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

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

0 голосов
/ 10 августа 2009

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

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

Но вы действительно не должны больше использовать расширение mysql. Посмотрите на PDO или mysqli и их поддержку "подготовленных заявлений".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...