Всегда ли PDO использует эмулированные подготовленные операторы по умолчанию?

PDO имеет возможностьPDO::ATTR_EMULATE_PREPARES который контролирует, должны ли эмулироваться подготовленные операторы, только если они не поддерживаются БД или всегда. Тем не менее, он не упоминает, всегда ли он имитирует их по умолчанию или нет.

Обычно можно предположить, что эмуляция используется только в случае необходимости, но, поскольку это PHP, ничего нельзя допустить только потому, что это вменяемое ...

 ThiefMaster♦16 мая 2012 г., 13:12
Там не будет никакой проверки ошибок во время->prepare() вызов и PDO должны экранировать ваши параметры, а не передавать их отдельно в базу данных. Это также не принесет пользы от оптимизаций, которые может выполнить база данных, когда вы подготовите оператор, и они выполнят его много раз.
 Shubham16 мая 2012 г., 13:04
Можно ли мне сказать, что означает эмуляция? И как это может быть плохо?

Ответы на вопрос(1)

Решение Вопроса

Зависит от драйвера базы данных. Они естьвсегда эмулируется по умолчанию для MySql (хотя, конечно, вы можете отключить эту опцию вручную); в Postgres правильная настройка по умолчаниюобнаружен динамически.

 16 мая 2012 г., 13:29
Я знал, что могу доверять коду, на который вы ссылались, а не документации, но не мог в это поверить. Это действительно больно, вы должны проверить все в PHP, прежде чем доверять ему: - /
 06 июл. 2016 г., 11:35
& Quot;If the code says something different than the documentation then obviously the documentation (or its interpretation) is wrong& quot; & # x2014; не обязательно: код может содержать ошибки. Вообще говоря, я считаю документацию спецификацией правильного поведения; и любое несоответствие с кодом, чтобы быть ошибкой реализации.
 20 сент. 2016 г., 19:49
Там, кажется,numerous open bugs для PDO MySQL связано с использованием неэмулируемых подготовленных операторов. Может быть, это одна из причин, почему они не хотят включать его по умолчанию.
 16 мая 2012 г., 13:23
Это смущает. Ваша ссылка на код говорит что-то отличное от документации:PDO_MYSQL will take advantage of native prepared statement support present in MySQL 4.1 and higher. If you're using an older version of the mysql client libraries, PDO will emulate them for you. (php.net/manual/en/ref.pdo-mysql.php)
 16 мая 2012 г., 13:25
@ZombieHunter: Если код говорит что-то отличное от документации, то очевидно, что документация (или ее интерпретация) неверна. В этом конкретном случае ИМХО следует читать & quot;can воспользоваться ». Документы все время ошибаются (PHP чаще, чем другие, как это обычно бывает ...sigh); Я потерял счет, сколько раз я обнаружилoutright lies в документации сам.

Ваш ответ на вопрос