php, mysql Транзакции и Ошибки в синтаксисе -- что откавается, а что нет. Когда выводится сообщение

Forums:

Опять же разбираем проблему отката транзакций в mysql.

Пишут, что:

....в случае SQL ошибки, транзакция сама по себе не откатится.

С этим утверждением не всё ясно.

Вот тут показана подобная ситуация (демонсрация для командной строки):

mysql> create table t7 (id integer primary key auto_increment, name text, lastname text);
Query OK, 0 rows affected (0.04 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t7 (name, lastname) values('name1', 'lastname1');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t7 (name, lastname) values('name1', 'lastname1');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t7 (name, lastname) ('name1', 'lastname1');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ''name
1', 'lastname1')' at line 1
mysql> commit;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from t7;
+----+-------+-----------+
| id | name  | lastname  |
+----+-------+-----------+
|  1 | name1 | lastname1 |
|  2 | name1 | lastname1 |
+----+-------+-----------+
2 rows in set (0.00 sec)

-- то есть последний (третий) insert запрос (который как раз составлен с ошибкой в синтаксисе -- пропущено слово values) не приводит к откату транзакции.

Тем не менее мы наблдаем ситуацию когда в php pdo запрос вида:

        $sql = "START TRANSACTION;"
                . "INSERT INTO corrections SET id_goods=:id_goods, number=:number, id_orders=:id_orders 
                    ON DUPLICATE KEY UPDATE number = number + :number;"
                . " rqerFSEFdsf UPDATE  goods SET reserve = reserve + :number, available = available - :number WHERE id = :id_goods;"
                . "COMMIT";

откатывается без всяких сообщений об ошибки (первый insert не выполнятся, хотя с ним всё ок).
Не связано ли это с тем, что синтаксический анализатор даже не выполняет первый запрос вдия ошибку во втором? Ведь они отправлены вместе (php pdo->execute() не выполняется для каждого из двух запросов по-отдельности). То есть по сути тут имеет место не откат транзакции, а просто невыполнение запроса, правда непоятно почему при это не выводится сообщение об ошибке.

Полезные ссылки:

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

не исключено что дело в режиме работы SQL или чем-то подобном.

_____________
матфак вгу и остальная классика =)