2009-08-09 2 views
1

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

Как я могу запустить 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 

сейчас что?

+1

Вы действительно не должны использовать его вообще. Вы должны использовать связанные параметры. –

ответ

2

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

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

+0

Теперь я должен узнать все о материалах PDO, это так расстраивает, я знаю, чего хочу достичь, но не имею слова, чтобы сделать это. – 2009-08-09 23:29:11

+0

Программирование означает постоянное обучение ... –

1

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

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

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

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

+0

Почему пустые голоса? это не моя вина, что вопрос был отредактирован ... –

0

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

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

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

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

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

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