您的位置 首页 php

使用带有PHP的MySQL事务处理

下面是在 MySQL 中使用事务支持的示例。假设有两个表USERTBL和EMAILTBL。让我们考虑一下 innodb 引擎,因为它是最受欢迎的交易存储引擎。

CREATE TABLE USERTBL(
USERKEY int unsigned not null auto_increment,
email varchar(120) not null,
name varchar(100) not null,primary key(USERKEY)
)type=INNODB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;CREATE TABLE EMAILTBL(
EMAILKEY int unsigned not null auto_increment,
email varchar(120) not null,primary key(EMAILKEY)
)type=INNODB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 

现在,作为一个例子,假设我们需要在USERTBL中插入一个新的记录/新用户,然后我们希望在表EMAILTBL中插入用户的电子邮件。如果第一次插入成功,我们只想插入到第二个表中。另外,如果第二个插入失败,我们希望终止事务,这意味着第一个插入将被撤消。

  1. 要启动事务,我们需要将auto COMMIT 设置为 FALSE (mysqli_autocommit)

  2. 要撤消一个事务,我们使用ROLLBACK语句,该语句还撤消对事务进行的数据库的任何更改,然后终止该事务(mysqli_rollback)

  3. 为了将事务中的所有更改保存到数据库,我们使用COMMIT语句。这也终止了事务(mysqli_commit)

下面的类代码片段中的函数dbProcessEmail显示了上面提到的三个案例。

<?phpclass DB{ private  $link;public function __construct(){$this->link = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);if (mysqli_connect_errno()) {
 printf ("Connect failed: %s\n", mysqli_connect_error());exit();
}
}//...public function dbProcessEmail($email,$name){
mysqli_autocommit($this->link,FALSE);
mysqli_query($this->link,"INSERT INTO USERTBL(USERKEY,email,name) VALUES('NULL','$email','$name')");if(mysqli_errno($this->link)){
printf("transaction aborted: %s\n", mysqli->error);
mysqli_rollback($this->link);return -1;
}else{
mysqli_query($this->link,"INSERT INTO EMAILTBL(EMAILKEY,email) VALUES('NULL','$email')");if(mysqli_errno($this->link)){
printf("transaction aborted: %s\n", mysqli->error);
mysqli_rollback($this->link);return -1;
}else{
printf("transaction succeeded\n");
mysqli_commit($this->link);return 1;
}
}return -1;
}
};?> 

文章来源:智云一二三科技

文章标题:使用带有PHP的MySQL事务处理

文章地址:https://www.zhihuclub.com/150418.shtml

关于作者: 智云科技

热门文章

网站地图