2013-11-13 4 views
0

Mysqli сохраняет о том, что есть ошибка синтаксиса в первой избранной части моего «комбинированный» запрос, как показано ниже:PHP MySQLi - хороня транзакции в одном запросе

$my_massive_query = 
    'START TRANSACTION WITH CONSISTENT SNAPSHOT; 
    SELECT d.id AS `Location ID`, ... 
    SELECT d.id AS `Location ID`, ... 
    SELECT d.id AS `Location ID`, ... 
    SELECT d.id AS `Location ID`, ... 
    SELECT d.id AS `Location ID`, ... 
    COMMIT'; 
$mysqli->query($my_massive_query); 

Является ли это «не допускается» в PHP? Нужно ли использовать MySQLi функции, такие как следующие:

$mysqli->autocommit(FALSE); 
$mysqli->query("SELECT ..."); 
$mysqli->query("SELECT ..."); 
$mysqli->query("SELECT ..."); 
$mysqli->commit(); 

Я выполнил запрос в MySQL (после того, как с помощью var_dump, чтобы принести его как есть), и выполняется прекрасно, так что я не думаю, что там на самом деле является синтаксической проблемой и что, возможно, одному не разрешено «комбинировать» запросы в одной строке?

Я беспокоюсь, что START TRANSACTION WITH CONSISTENT SNAPSHOT; имеет дополнительные условия, которые не будут удовлетворены, просто установив autocommit в false.

+0

[This] (http://php.net/manual/en/mysqli.multi-query.php) может помочь. –

ответ

1

mysqli::query может обрабатывать только 1 запрос за раз. Чтобы выполнить несколько запросов в одной строке, используйте mysqli::multi_query.

+0

Я отмечаю это как ответ по другому, хотя оба они велики по той простой причине, что вы подтвердили: «mysqli :: query может обрабатывать только один запрос за раз». – Programster

1

Используя функции API, вы можете сделать все вы можете сделать в консоли.
Однако каждую команду нужно вызывать отдельно. Это очень просто правило следовать

$mysqli->query("START TRANSACTION WITH CONSISTENT SNAPSHOT"); 
$mysqli->query("SELECT ..."); 
$mysqli->query("SELECT ..."); 
$mysqli->query("COMMIT"); 
+0

Всегда быстрая подача голосов, не так ли? .. На самом деле вы были бы более полезны, если бы сопровождали ваши мнения с объяснениями. –

+0

Благодарим вас за ответ. Просто быстрый аддон к этому: это, по-видимому, намного меньше (по крайней мере для меня), чем при использовании mysqli :: multi_query. Кроме того, используя это, нужно помнить, чтобы получить результаты от каждого запроса, например. $ result = $ mysqli-> query ("SELECT ..."); но это проще, чем использование mysqli_next_result и mysqli_store_result, которое требуется с помощью альтернативного метода – Programster

+0

, оно не может быть медленнее. только если вы измеряете свой многопроцессорный запрос без получения результатов. –

Смежные вопросы