Предположим, что я выполняю несколько запросов на использовании сервера mysql_query
. Результаты каждого запроса влияют на последующий запрос. Будет каждый вызов mysql_query
будьте полностью выполнены, прежде чем управление идет дальше к следующему?
Править: Я забыл упоминать, я не использую механизм системы хранения транзакций.
Да, сервер MySQL должен вернуть данные и завершить запрос, прежде чем PHP перейдет к следующему действию, будь то присвоение возвращаемого значения или переход к следующему строка кода.
mysql_query( "INSERT INTO y VALUES (x,1)" );
mysql_query( "SELECT x FROM y WHERE z=1" );
mysql_query( "UPDATE y SET x=x+1 WHERE z=1" );
mysql_query( "SELECT x FROM y WHERE z=1" );
x будет 1, затем 2, и ко времени четвертого оператора 2 будет возвращено скрипту. Невозможно выполнять запросы параллельно в одном сценарии PHP - для этого потребуется параллельное выполнение или многопоточность на другом языке (например, Java).
Когда вы не используете транзакции, MySQL мгновенно фиксирует каждый запрос, независимо от используемого вами языка программирования. Так что да, вы можете положиться на последовательность ваших запросов.
В том же скрипте и потоке, да. Другие запросы из других скриптов PHP могут выполняться одновременно, но все запросы из вашего скрипта php будут блокироваться.
Вы всегда сможете оценить возвращаемое значение, прежде чем двигаться дальше.
Как уже упоминалось другими, PHP - это последовательный язык (т.е. одна инструкция будет выполняться после следующей) без явной поддержки потоковой передачи. Однако вы можете использовать mysql_unbuffered_query , который будет блокироваться только до тех пор, пока не будет возвращена первая строка результата (в отличие от ожидания всех строк, как это делает mysql_query).