I was searching for a way to insert data into two database tables in a single query in such a way that if one failed, neither saved (I don\'t want orphaned data). I came ac
Try breaking the lines into multiple php statements:
$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());
Try:
$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();
Btw, Simon Germain got a good point, Transaction will work with tables using InnoDB engine.
Make sure you're using an InnoDB table and not a MyISAM table, as MyISAM is not transactional.
To use an InnoDB table, when you create it, after the closing paren, add ENGINE=InnoDB
. By default, MyISAM is used.
you need to use multi_query
instead.
http://php.net/manual/en/mysqli.multi-query.php