首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用autoCommit的Php

使用autoCommit的Php
EN

Stack Overflow用户
提问于 2013-08-15 00:09:38
回答 3查看 5.3K关注 0票数 2

我已经写了一段代码来关闭AutoCommit:

代码语言:javascript
复制
<?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);
?>

此代码的输出为: a:1 b: in else

但是在表中,第一行是插入的。我用wamp来做这件事。请让我知道我哪里错了

EN

回答 3

Stack Overflow用户

发布于 2013-08-15 00:21:54

我使用这个函数来启动、提交和回滚事务:

代码语言:javascript
复制
function transactionStart($dbConnection){
    return $dbConnection->autocommit(false);
}
function transactionCommit($dbConnection) {
    $dbConnection->commit();
    return  $dbConnection->autocommit(true);
}
function transactionRollback($dbConnection) {
     $dbConnection->rollback();
     return $dbConnection->autocommit(true);
}

为您的特定情况编写一点伪代码:

代码语言:javascript
复制
//TODO: Build up connection, results in $con variable
transactionStart($con);
//TODO: Insert data
if(*all data inserted correctly*){
  transactionCommit($con);
} else{
  transactionRollback($con);
}
票数 0
EN

Stack Overflow用户

发布于 2013-08-15 00:26:35

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

代码语言:javascript
复制
 START TRANSACTION

将在SQL中执行此操作。或者您可以使用

代码语言:javascript
复制
$con->autocommit ( false );
$con->begin_transaction(); 
... transactional SQL statements ...
$con->commit();

干净利落地做这件事。

PHP + MySQL transactions examples

@Sylvain Leroux是对的!如果您使用的是MyISAM,那么您可以发出您想要的所有事务命令,但它们仍然不能工作。事务支持在InnoDB中。

票数 0
EN

Stack Overflow用户

发布于 2015-04-20 19:34:32

我认为您的第二列是一个varchar。您的第二个insert语句缺少第二列的引号。请替换插入查询,如下所示

代码语言:javascript
复制
$a = mysqli_query($con,"INSERT INTO member VALUES (2,'Peter','Peter')");
$b = mysqli_query($con,"INSERT INTO member VALUES (3,'honey','honey')");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18236887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档