Транзакция MySQL из PHP - PullRequest
2 голосов
/ 19 июля 2010

ЗАПРОС 1:

$link = mysql_connect('localhost', 'root', '');
mysql_select_db('rems', $link);
mysql_query('SET AUTOCOMMIT=0; START TRANSACTION', $link);
mysql_query('DELETE FROM admins WHERE admin_id=4', $link);
mysql_query('ROLLBACK; SET AUTOCOMMIT=1', $link);

ЗАПРОС 2:

$link = mysql_connect('localhost', 'root', '');
mysql_select_db('rems', $link);
mysql_query('SET AUTOCOMMIT=0;START TRANSACTION;
    DELETE FROM admins WHERE admin_id=4;
    ROLLBACK; SET AUTOCOMMIT=1', $link);

Из приведенных выше двух запросов первый не выполняется должным образом (транзакция не работает) из-за отдельного выполнения запросов путем вызова функций mysql_query несколько раз. Но мне нужно, чтобы это было сделано таким образом. То есть мне нужен результат по первому пути (вызов функции mysql_query несколько раз для одной транзакции)

Любой ИДЕЯ пожалуйста ???

1 Ответ

5 голосов
/ 19 июля 2010

В стандартном модуле mysql любой запрос вызывается отдельно:

mysql_query('SET AUTOCOMMIT=0');
mysql_query('START TRANSACTION');
mysql_query('DELETE FROM admins WHERE admin_id=4');
mysql_query('ROLLBACK');//nothing will be done, I assume it's for testing
mysql_query('SET AUTOCOMMIT=1');

Или сначала создайте процедуру:

DELIMITER //
CREATE PROCEDURE weirdrolledbackdelete (IN oid INTEGER)
BEGIN
SET AUTOCOMMIT=0;
START TRANSACTION;
DELETE FROM admins WHERE id = oid;
ROLLBACK;
SET AUTOCOMMIT=1;
END;//

Так что вы можете использовать его позже:

mysql_query('CALL weirdrolledbackdelete(4);');
...