带有自动提交的 Php

标签 php mysql database wamp autocommit

我写了一段代码来关闭自动提交:

<?php 
$con = mysqli_connect("localhost","root","","databases");
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if(mysqli_query($con,"SET autocommit=0")){//tried using mysqli_autocommit($con,FALSE);

// Insert some values 
$a=mysqli_query($con,"INSERT INTO member VALUES (2,'Peter','Peter')");
$b=mysqli_query($con,"INSERT INTO member VALUES (3,honey,'honey')");
echo "a:";
echo $a;
echo "b:";
echo $b;
if($a&&$b){
mysqli_query($con,"COMMIT");//tried using mysqli_commit($con);
echo "in if";
}
else{
mysqli_query($con,"ROLLBACK");//tried using mysqli_rollback($con);
echo "in else";
}
}
mysqli_close($con);
?>

这段代码的输出是: 一个:1 乙: 在其他地方

但是在表中,第一行被插入了。 我为此使用了wamp。 请让我知道哪里出错了

最佳答案

在发出一系列构成事务的sql命令之前,需要先启动一个事务。

 START TRANSACTION

将在 SQL 中完成。或者你可以使用

$con->autocommit ( false );
$con->begin_transaction(); 
... transactional SQL statements ...
$con->commit();

干净地做这件事。

PHP + MySQL transactions examples

@Sylvain Leroux 是对的!如果您使用的是 MyISAM,您可以随心所欲地发出事务命令,但它们仍然无法工作。事务支持在 InnoDB 中。

关于带有自动提交的 Php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18236887/

相关文章:

javascript - 当您返回浏览器时如何避免重新计算值(value)?

php - 更新 wampserver 中的值

php - 为什么我在导出为 CSV 的 MySQL 中得到 HTML?

mysql - 删除BBPress的所有数据

php - Doctrine 1.2 多对多关系的列命名约定

python - Django 从另一个进程访问数据库

php - Symfony 5 $form->isSubmitted() 为文件上传返回 False

database - BTrDB 连接失败

mysql - Hibernate:查询日期范围

javascript - 尝试在函数中显示/隐藏时,foreach 循环中的 div #id 仅选择最后一个变量