Ошибка PDO: prepare () с несколькими запросами не работает внутри транзакции - PullRequest
1 голос
/ 08 марта 2012

В поисках решения моего предыдущего вопроса я столкнулся со странным фактом - PDO prepare () с несколькими запросами не работает правильно внутри транзакции. Вы не получите ни предупреждения, ни исключения, ничего - только молчание и отсутствие коммита / отката.

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

Если транзакции нет, все работает нормально.

Если вы поместите несколько операторов prepare () (с одним запросом в каждой) внутри одной транзакции - опять все работает правильно.

Я читал, что MySQL не поддерживает подготовленные операторы с несколькими запросами, но дело в том, что PDO по умолчанию не обрабатывает реальные подготовленные операторы MySQL, а только эмулирует их.

Я провел целый день, пытаясь найти какой-нибудь документ, описывающий эту проблему, но мне не удалось.

Кто-нибудь знает, действительно ли это ошибка PDO?

1 Ответ

1 голос
/ 29 октября 2013

Это поведение на самом деле является ошибкой в ​​некоторых версиях (проверено на PHP 5.4.6-Ubuntu и PHP 5.4.19-Windows).

Нет (легко найти) документации по этой проблеме, и единственный обходной путь - использовать несколько подготовленных операторов.

Только что сообщил об ошибке https://bugs.php.net/bug.php?id=65994

...