mysql php 事务_php 在 控制 mysql 事务中的方法

MYSQL

的事务处理主要有两种方法。

1

、用

begin,rollback,commit

来实现

begin

开始一个事务

rollback

事务回滚

commit

事务确认

2

、直接用

set

来改变

mysql

的自动提交模式

MYSQL

默认是自动提交的,也就是你提交一个

QUERY

,它就直接执行!我们可以通过

set autocommit=0

禁止自动提交

set autocommit=1

开启自动提交

来实现事务的处理。

当你用

set autocommit=0

的时候,你以后所有的

SQL

都将做为事务处理,直到你用

commit

确认或

rollback

结束。

注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!

个人推荐使用第一种方法!

MYSQL

中只有

INNODB

BDB

类型的数据表才能支持事务处理!其他的类型是不支持的!

***

一般

MYSQL

数据库默认的引擎是

MyISAM,

这种引擎不支持事务!如果要让

MYSQL

支持事务,可以自己手动修改

:

方法如下:

1.

修改

c:\appserv\mysql\my.ini

文件,找到

skip-InnoDB,

在前面加上

#

,后保存文件。

2.

在运行中输入:

services.msc,

重启

mysql

服务。

3.

phpmyadmin

中,

mysql->show engines;(

或执行

mysql->show variables like 'have_%'; ),

查看

InnoDB

YES,

即表示数据库支持

InnoDB

了。

也就说明支持事务

transaction

了。

4.

在创建表时,就可以为

Storage Engine

选择

InnoDB

引擎了。如果是以前创建的表,可以使用

mysql->alter table table_name type=InnoDB;

mysql->alter table table_name engine=InnoDB;

来改变数据表的引擎以支持事务。

以下是我做測試的示例代碼

:

/***************

transaction--1 ***************/

/*

方法一

*/

mysql_query("BEGIN");

//

或者

mysql_query("START TRANSACTION");

//

若不使用事務,則

$sql

執行成功,

$sql1

執行失敗

$sql

=

" insert into test values('11','88') ";

$sql1 =

" insert into test values('11','88','444') ";

$res

= mysql_query($sql);

$res1 = mysql_query($sql1);

//

因爲使用了事務,則兩個

insert

都執行失敗

if($res && $res1){

mysql_query("COMMIT");

}

else{

mysql_query("ROLLBACK");

}

mysql_query("END");

/****************

transaction--2 *******************/

/*

方法二

*/

mysql_query("SET

AUTOCOMMIT=0");

//

設置

mysql

不自動提交,需自行用

commit

語句提交

$sql

=

" insert into test values('11','88') ";

$sql1 =

" insert into test values('11','88','444') ";

$res

= mysql_query($sql);

$res1 = mysql_query($sql1);

//

因爲使用了事務,則兩個

insert

都執行失敗

if($res && $res1){

mysql_query("COMMIT");

}

else{

mysql_query("ROLLBACK");

}

mysql_query("END");

/*************************** END ***************/

对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法:

代码如下:

//MyISAM & InnoDB 都支持,

//Notes:query語句不能寫在一起如:mysql_query("select * from a;select * from b;");

$sql_1=" LOCK TABLES test WRITE ";

mysql_query($sql_1);

$sql_2=" INSERT INTO test VALUES('".$a."','".$b."') ";

if(mysql_query($sql_2)){

echo 'successful!';

}else{

echo 'Unsuccessful!';

}

$sql_3=" UNLOCK TABLES ";

mysql_query($sql_3);

/*************************** END ***************/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP连接MySQL数据库的三种方式分别是PDO、MySQLi和mysql。 PDO(PHP Data Objects)是PHP提供的一种数据库操作扩展,支持多种数据库,其包括MySQL。PDO提供了一组统一的方法,使开发者能够以同样的方式对待不同的数据库。其优点包括安全性高、可移植性好、支持事务处理等。使用PDO连接MySQL数据库时,需要使用PDO的构造函数new PDO(),并传入相关的连接信息。 MySQLi(MySQL Improved)是PHP的一种连接MySQL数据库的扩展,是对原有mysql扩展的增强和改进。MySQLi提供了面向对象和面向过程两种API,支持事务处理、预处理语句、存储过程等功能,同时也提供了对MySQL的新特性的支持。使用MySQLi连接MySQL数据库时,首先需要创建一个MySQLi对象,然后调用相应的方法进行连接、查询等操作。 mysql扩展是PHP早期版本提供的一种连接MySQL数据库的方式,但自PHP5.5.0版本开始已被弃用,不再被推荐使用。mysql扩展的连接方式相对简单,使用mysql_connect()函数进行连接,并传入相关的连接参数。然而,mysql扩展存在一些安全性和兼容性的问题,容易受到SQL注入等攻击。 综上所述,PDO、MySQLi和mysqlPHP常用的三种连接MySQL数据库的方式。其PDO具有较高的安全性和可移植性,使用方式统一;MySQLi支持较多的功能特性,包括事务处理、预处理语句等;mysql扩展已被弃用,不推荐使用。开发者可以根据自己的需求和情况选择合适的连接方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值