Я в процессе обновления нашей базы кода с PHP5.4 до PHP7. в наших тестах мы завершаем весь тест в транзакции командойmysqli эквивалент mysql_query ("BEGIN")
mysql_query ("BEGIN");
затем сделать кучу вещей
mysql_query ("ROLLBACK");
тогда все между этими двумя командами рассматривалось как транзакция и может быть отброшено в конце теста. Я не смог достичь этой функциональности в PHP7 с помощью mysqli. я попытался использовать функцию mysqli_autocommit, но тогда это не позволяло различным запросам в тесте иметь доступ к созданным данным ранее в тесте. как будто каждая вставка была в своей транзакции.
UPDATE:
проблема в том, что каждый раз, когда я создать новый адаптер к столу, кажется, я создаю новое подключение к БД. с PHP5 и командой выше mysql_query («BEGIN») «КАЖДОЕ соединение было включено в эту транзакцию, и все заявления можно было отбросить назад. Я не нашел способ сделать это с помощью php7. если я использую
$mysqli->begin_transaction();
тогда ТОЛЬКО одно соединение является частью транзакции. для того, чтобы достичь желаемой функциональности, я должен неявно заставить адаптер EVERY использовать существующее соединение, а не создавать свои собственные. Я предполагаю, что возможно, что PHP7 делает это автоматически для вас? так как теперь единственный способ понять, как это сделать, - установить GLOBAL и, если он существует, использовать соединение, а не создавать новый. поэтому мой вопрос по-прежнему стоит, есть ли способ заставить все соединения, которые открываются, чтобы быть включенными в транзакцию, которую можно отбросить назад, а еще один вопрос - вот что лучше всего подходит для повторного использования соединений, поскольку я уверен, что настройка глобальный - это неправильный способ сделать это.
Я использую MySQL 5.5.52. PHP 7.0.10
См. Http://php.net/manual/en/mysqli.begin-transaction.php –
@RocketHazmat Я пробовал это, но все вставки и обновления регистрируются как завершенные и доступны полностью после завершения теста. – radamnyc
Что такое механизм базы данных? –