PHP / MySQL – «НАЧАТЬ … COMMIT» не работает

Я искал способ вставить данные в две таблицы базы данных в одном запросе таким образом, что если один из них не удался, то не был сохранен (я не хочу потерять данные). Я столкнулся с вопросом о переполнении стека, который показал мне, как использовать BEGIN … COMMIT для этого, но он просто не работает.

Вот запрос, который я создал:

$query = "BEGIN; INSERT INTO content_subpages (title, url_referer) VALUES ('$pagetitle','$url_referer'); INSERT INTO ccm_main_menu (sub_item, sub_item_link,sub_item_sort_order) VALUES ('$pagetitle','$url_referer','$newsort'); COMMIT;"; mysql_query($query) or die (mysql_error()); 

Я получаю следующую ошибку: у You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO content_subpages (title, url_referer) VALUES ('TESTING','testing'); ' at line 2 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO content_subpages (title, url_referer) VALUES ('TESTING','testing'); ' at line 2

Это мой первый раз, используя BEGIN … COMMIT, поэтому разумно, что я мог бы сделать что-то неправильно, но я следовал синтаксису примера SQL Fiddle, заданного выбранным ответом на вопрос о переполнении стека, который я упомянул (http: // stackoverflow.com/questions/12649706/mysql-insert-into-multiple-tables-in-same-query-with-begincommit), но он все равно не сработает.

Если я могу легко достичь множественного результата INSERT «все или ничего» без BEGIN … COMMIT, это было бы приемлемым решением.

заранее спасибо

    Попробуйте разбить строки на несколько операторов php:

     $query = "BEGIN"; mysql_query($query) or die (mysql_error()); $query = "INSERT INTO content_subpages (title, url_referer) VALUES ('$pagetitle','$url_referer')"; mysql_query($query) or die (mysql_error()); $query = "INSERT INTO ccm_main_menu (sub_item, sub_item_link,sub_item_sort_order) VALUES ('$pagetitle','$url_referer','$newsort')"; mysql_query($query) or die (mysql_error()) $query = "COMMIT"; mysql_query($query) or die (mysql_error()); 

    вам нужно использовать multi_query .

    http://php.net/manual/en/mysqli.multi-query.php

    Убедитесь, что вы используете таблицу InnoDB, а не таблицу MyISAM, так как MyISAM не является транзакционным.

    Чтобы использовать таблицу InnoDB, при ее создании, после закрывающего пара, добавьте ENGINE=InnoDB . По умолчанию используется MyISAM.

    Пытаться:

      $dbh->beginTransaction(); $query = "INSERT INTO content_subpages (title, url_referer) VALUES ('$pagetitle','$url_referer'); INSERT INTO ccm_main_menu (sub_item, sub_item_link,sub_item_sort_order) VALUES ('$pagetitle','$url_referer','$newsort')"; $dbh->exec($query); $dbh->commit(); 

    Кстати, Симон Жермен получил хорошую оценку, Transaction будет работать со столами с использованием двигателя InnoDB.