php - 来自 PHP 的 MySQL 事务

标签 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);

查询 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 函数)

有什么想法吗???

最佳答案

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

关于php - 来自 PHP 的 MySQL 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3280592/

相关文章:

PHP FTP 上传数千个文件

php - SQL查询,指定哪些top结果?

PHP - 如何用 MYSQL 连接到另一台服务器?

MySQL查询连接3个表并计数

.net - 找不到 mysql .net 更新存储过程

java - Spring JDBC 和 MySQL 中无法使用 SET 关键字

php - 用于容纳具有可变多个选项的产品的数据库结构

php - 从表中删除 (*php 变量*) 中的 id 返回错误

sql - 数据库设计 : New Table versus New Columns

database - 五十一个数据库错误 - 重命名现有日志文件并且子进程退出并出现错误 100