mysqli transaction странно срабатывает

181
22 июля 2018, 11:00
$mysqli = new mysqli("localhost", "root", "", "my-base");
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
$mysqli->autocommit(FALSE);
$mysqli->query("INSERT INTO `language` (`f1`,`f2`,`f3`,`f4`) VALUES ('111', '765', 's', '".date("H:i:s",time())."')");
$mysqli->query("INSERT INTO `language` (`f1`,`f2`,`f3`,`f5`) VALUES ('222', '908', 's', '".date("H:i:s",time())."')");
$mysqli->commit();
$mysqli->close();

Собственно хочу сделать 2 INSERT, причем второй с неправильным полем f5 за место f4. т.е. как мне думается 1 запрос точно не должен отработать, и т.к. это транзакция отменяются все запросы в ней. Выполняю. Первый INSERT проходит на ура, второй ест-но нет.

Прошу подсказать, или объяснить как сделать так, что бы при ошибке запроса ( одного из .. ) запросы не выполнялись вообще

p.s. есть конечно вариант в классе который обрабатывает собирать ответы, проходиться по ним в цикле, и если по одному запросу нет положительного ответа делать rollback, но изначально думал, что commit или работают все запросы или не работает ни один

Answer 1

Всё так задумано в mysql. Ошибка запроса не рассматривается как повод принудительно отменять транзакцию как в других СУБД. Вам необходимо проверять результат каждого запроса самостоятельно.

Но вот ссылку на мануал дать затрудняюсь, не нашёл там упоминания этого.

READ ALSO
Как рисовать на картинке?

Как рисовать на картинке?

Как правильно организовать и что использовать для решения задачи:

198
Как вызвать функцию из $js = <<<JS?

Как вызвать функцию из $js = <<<JS?

Функцию завернул в $js = JS, и не знаю как вызвать функцию send()

194
Попытка занести в бд данные

Попытка занести в бд данные

Есть форма, в который какое-то количество селектовТак же, прикручен плагин dropzone

191
Yii2 RBAC Как узнать роль пользователя?

Yii2 RBAC Как узнать роль пользователя?

Работаю с RBAC в Yii2Существует иерархия юзеров сайта

201