2013-06-13 2 views
1

Даже после большого чтения я не получил ни одной вещи. Предотвращает ли PDO данные, ЕСЛИ Я НЕ использую bindValue или bindParam? Возможно, я не понял, что именно делает «подготовка». Я знаю, что он хранит процедуру как объект. Я знаю, что выигрыш в производительности (даже использовал его с транзакциями), но побег это единственное, что я не понялPHP + PDO - информация о подготовленном операторе

Пусть это:

$db = new PDO('mysql:host=' . $config['db']['host'] . ';dbname=' . $config['db']['dbname'], $config['db']['username'], $config['db']['password'], $config['db']['options']); 

$query = $db->prepare("INSERT INTO table (col1, col2) VALUES (:col1, :col2)"); 

$result = $query->execute(array('col1' => $val_col1, 'col2' => $val_col2)); 

Где/когда фактическая утечка делается? Пока Подготовка или пока связывание a параметр/значение? Что делать, если я пропущу это:

$query->bindParam(":col1", $val_col1); 
$query->bindParam(":col2", $val_col2); 

Обратите внимание, что у меня есть PDO :: ATTR_EMULATE_PREPARES набор для ложной (он установлен в массиве $ конфигурации)

Использование PHP 5.4.13 и MySQL 5.1.67

ответ

1

Передача массива в execute() - это всего лишь синтаксический сахар для серии bindValues, выполненных тогда внутри. Итак,

Является ли PDO экранирующим данными, ЕСЛИ Я НЕ использую bindValue или bindParam?

Да, если у вас есть данные, заменяемые заполнителями.

Я знаю, что производительность преимущество

Есть нет производительности не выигрывает

Где/когда фактическая утечка делается? При подготовке ...

  • Это не может быть сделано во время подготовки, если вы подумать немного. Пока нет данных, чтобы «убежать».
  • «Побег» - это не то, что вы так думаете. «Форматирование» - более правильный термин. PDO форматирует каждое значение из переданного массива в виде строки.
  • Форматирование выполняется перед выполнением, когда режим эмуляции включен и never when off
+0

Когда я думал о преимуществах производительности я думал о нескольких запросов (скажем, вставки) с различными значениями. Вы имеете в виду подстаканники как "?" или ": colname" тоже работает? Я думал, что отключающие силы эмуляции убегают каждый раз –

+0

, пожалуйста, прочитайте по ссылке, которую я разместил выше –

+0

Спасибо :) Кажется, я думал назад :) –

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