Подготовленные отчеты и транзакции MySQLi

Есть ли способ совершать транзакции с подготовленными заявлениями?

Я имею в виду, могу ли я использовать следующий пример с $mysqli->autocommit(FALSE); и $mysqli->commit( ); и $mysqli->rollback( );

 //Preparing the statment $insert_stmt=$mysqli->prepare("INSERT INTO x VALUES(?,?)") or die($mysqli->error); //associate variables with the input parameters $insert_stmt->bind_param("is", $my_number,$my_string); //i=integer //Execute the statement multiple times.... for ($my_number = 1; $my_number <= 10; $my_number++) { $my_string="row ".$my_number; $insert_stmt->execute() or die ($insert_stmt->error); } $insert_stmt->close(); 

Я огляделся, но не могу найти пример использования подготовленных операторов (не PDO): http://php.net/manual/en/mysqli.prepare.php с транзакциями, я нахожу только примеры, подобные упомянутым здесь: http : //book.opensourceproject.org.cn/lamp/mysql/mysqlstored/opensource/0596100892/mysqlspp-chp-13-sect-2.html, где транзакции и подготовленные заявления никогда не смешиваются.

Было бы неправильно использовать их вместе?

Подготовленные заявления и транзакции – это несвязанные методы и технологии.

Вы можете ROLLBACK команды START TRANSACTION и COMMIT / ROLLBACK непосредственно вместо использования специальных методов. Они функционально эквивалентны.

Для вашего цикла вы должны отправить START TRANSACTION перед prepare , затем ваш COMMIT после выхода цикла. Вероятно, вы не должны пытаться открыть транзакцию после того, как готовый оператор был запущен, но до его выполнения.

По какой-то причине они не добавили команду «начать транзакцию» в пользу отключения автообмена. Это одна из тех странных вещей о mysqli, которая заставляет меня всегда рекомендовать PDO. 🙂 Открытие транзакции неявно отключает autocommit на время транзакции.