在PHP中,如果断开连接而不提交事务,而不是提交事务,是否可以让MySQL回滚事务?

在PHP中,如果断开连接而不提交事务,而不是提交事务,是否可以让MySQL回滚事务?,php,mysql,transactions,Php,Mysql,Transactions,如果我运行以下PHP,我不希望在测试表中插入任何值,因为我有一个尚未提交的事务: $db = mysql_connect("localhost","test","test"); mysql_select_db("test"); mysql_query("begin transaction;"); mysql_query("insert into Test values (1);") or die("insert error: ". mysql_errror()); die('Data shoul

如果我运行以下PHP,我不希望在测试表中插入任何值,因为我有一个尚未提交的事务:

$db = mysql_connect("localhost","test","test");
mysql_select_db("test");
mysql_query("begin transaction;");
mysql_query("insert into Test values (1);") or die("insert error: ". mysql_errror());
die('Data should not be commited\n');
mysql_query("commit;"); // never occurs because of the die()
但是,它似乎无论如何都在承诺。对于不在站点其他地方使用事务的PHP,有没有一种方法可以在不关闭自动提交的情况下关闭这种行为


编辑:这只是一个愚蠢的打字错误。它应该是启动事务或开始。不开始交易。很抱歉浪费了大家的时间。

使用mysql\u查询“开始”。SQL BEGIN事务无效,事实上mysql_查询在该查询上返回false,这意味着存在错误。它不起作用,因为您从未启动过事务。

使用mysql\u查询“开始”。SQL BEGIN事务无效,事实上mysql_查询在该查询上返回false,这意味着存在错误。它不起作用,因为您从未启动过事务。

启动事务的语法是:

START TRANSACTION
您正在谈论的功能是自动提交。如果您不想要它,您必须禁用它:

SET autocommit = 0
参考资料可在


我还建议您测试所有mysql的返回值。。。功能。您不能假设它们总是成功运行。

启动事务的语法是:

START TRANSACTION
您正在谈论的功能是自动提交。如果您不想要它,您必须禁用它:

SET autocommit = 0
参考资料可在


我还建议您测试所有mysql的返回值。。。功能。您不能假设它们总是成功运行。

默认情况下,事务不会回滚。应用程序代码负责决定如何处理此错误,无论是重试还是回滚

如果需要自动回滚,手册中也会对此进行说明:

The current transaction is not rolled back. To have the entire transaction roll back, start the server with the `--innodb_rollback_on_timeout` option.

默认情况下,事务不会回滚。应用程序代码负责决定如何处理此错误,无论是重试还是回滚

如果需要自动回滚,手册中也会对此进行说明:

The current transaction is not rolled back. To have the entire transaction roll back, start the server with the `--innodb_rollback_on_timeout` option.

哎呀!我的意思是输入start transaction,而不是begin transaction,当我修复它时,它会工作。它总是简单的哎呀!我的意思是输入start transaction,而不是begin transaction,当我修复它时,它会工作。它总是简单的在我安装的MySQL上,query BEGIN事务给出了一个错误,即您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以了解在my install of MySQL第1行的“transaction”附近使用的正确语法,查询BEGIN transaction会给出错误,您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行“transaction”附近使用的正确语法。在生产代码中,我确实测试了mysql函数的返回值,但这只是一个愚蠢的测试脚本,它向一个要使用事务的集合证明了这一点,我们不需要检查代码并在出现错误的地方添加数百个回滚语句。现有的die声明会起作用的。是的。在生产代码中,我确实测试了mysql函数的返回值,但这只是一个愚蠢的测试脚本,它向一个要使用事务的集合证明了这一点,我们不需要检查代码并在出现错误的地方添加数百个回滚语句。现有的die语句就可以做到这一点。