来自PHP的MySQL事务

A.N*_*lam 2 php mysql database transactions

问题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);
Run Code Online (Sandbox Code Playgroud)

问题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);
Run Code Online (Sandbox Code Playgroud)

从上面的两个查询中,第一个查询没有正确执行(事务不起作用),因为通过多次调用mysql_query函数分别执行查询.但我需要通过这种方式来完成.那就是我需要第一种方式的结果(为单个事务多次调用mysql_query函数)

任何IDEA请???

Wri*_*ken 5

使用标准的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');
Run Code Online (Sandbox Code Playgroud)

或者首先创建一个程序:

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

所以你以后可以使用它:

mysql_query('CALL weirdrolledbackdelete(4);');
Run Code Online (Sandbox Code Playgroud)