代码之家  ›  专栏  ›  技术社区  ›  A.N.M. Saiful Islam

来自PHP的MySQL事务

  •  2
  • A.N.M. Saiful Islam  · 技术社区  · 14 年前

    $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\u查询 多次运行。但我需要这样做。这是我需要的结果,由第一种方式(电话) mysql\u查询 单个事务的函数(多次)

    任何 拜托???

    1 回复  |  直到 14 年前
        1
  •  5
  •   Wrikken    14 年前

    使用标准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);');