PHP中执行MYSQL事务解决数据写入不完整等情况

PHP中执行MYSQL事务解决数据写入不完整等情况,第1张

近来稍有时间研究了下MYSQL中的事务 *** 作,在很多场合下很是适用,譬如在注册的时候需要初始化很多张关联表的时候,问答回复的时候需要至少同时 *** 作两张表,这些都会在某些时候只能成功更新一张表,而另外的SQL语句出现错误,正常的 *** 作会导致初始化了一张表

,其他的都木有能初始化,这个时候就会导致用户表里的用户信息已经执行插入,导致提示注册失败,但是用户已经注册了部分信息,这个时候需要程序员去数据库删除相应的数据是一个比较不好的事情。

因此这边考虑使用事务,事务可以进行模拟SQL *** 作,当所有的SQL都 *** 作成功的时候才进行SQL *** 作,只要有一个 *** 作失败就回滚当前事务的所有SQL *** 作,避免出现上面描述中出现的数据写入不完整等情况。

下面是鄙人写的一小段代码,欢迎大家参考和提出意见:

复制代码

代码如下:

/**

*

@todo

多条sql的事务处理

*

@param

$sqls

array

*

@return

boole

true/false

*/

public

function

doArraySqlActionsTran($password,$sqls){

$db

=

$this

->

doSqlLink($password)//打开数据库链接

$db

->

autocommit(FALSE)//设置为不自动提交,因为MYSQL默认立即执行

//获取SQL执行结果数组

for

($i=0$i<count($sqls)$i++){

$result[$i]

=

$db

->

query($sqls[$i])

}

//解析SQL执行结果数组

for

($j=0$j<count($result)$j++){

if

($result[$j]==FALSE){

$result[$j]='false'

}else{

$result[$j]='true'

}

}

//查找SQL结果数组中是否存在false结果集

if

(in_array('false',$result)){

$sqlResult=FALSE

}else{

$sqlResult==TRUE

}

//根据结果集进行数据库回滚或者执行 *** 作

if

($sqlResult==FALSE){

$db

->

rollback()//判断当执行失败时回滚

$return=FALSE//

正式环境中使用

//$return='ROOLBACK'//test

标记使用

}else{

$db

->

commit()//执行事务s

$return=TRUE//

正式环境中使用

//$return='COMMIT'//test

标记使用

}

$db->autocommit(true)

//设置为非自动提交——事务处理

$db->close()//关闭连接

return

$return

}

到此事务执行批量SQL *** 作基本完成,谢谢大家!

本文实例讲述了php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率。分享给大家供大家参考,具体如下:

<?php

/**

*

测试pdo和mysqli的执行效率

*/

header("Content-type:text/htmlcharset=utf-8")

//通过pdo链接数据库

$pdo_startTime

=

microtime(true)

$pdo

=

new

PDO("mysql:host=localhostdbname=test","root","1234",array(PDO::MYSQL_ATTR_INIT_COMMAND

=>

"SET

NAMES'utf8'"))

for($i=1$i<=100$i++){

$title

=

"pdo标题".$i

$content

=

"pdo内容".$i

$addtime

=

time()

$user_id

=

$i

$pdo_sql

=

"INSERT

INTO

`article`(`title`,`content`,`addtime`,`user_id`)

VALUES(:title,:content,:addtime,:user_id)"

$sth

=

$pdo->prepare($pdo_sql)

$sth->bindParam(':title',$title)

$sth->bindParam(':content',$content)

$sth->bindParam(':addtime',$addtime)

$sth->bindParam(':user_id',$user_id)

$sth->execute()

}

$pdo_endTime

=

microtime(true)

$pdo_time

=

$pdo_endTime

-

$pdo_startTime

echo

$pdo_time

echo

"<hr/>"

//通过mysql链接数据库

$mysqli_startTime

=

microtime(true)

$mysqli

=

mysqli_connect("localhost","root","1234","test")

or

die("数据连接失败")

mysqli_query($mysqli,"set

names

utf8")

for($i=1$i<=100$i++){

$title

=

"mysqli标题".$i

$content

=

"mysqli内容".$i

$addtime

=

time()

$user_id

=

$i

$sql

=

"INSERT

INTO

`article`(`title`,`content`,`addtime`,`user_id`)

VALUES('".$title."','".$content."',".$addtime.",".$user_id.")"

mysqli_query($mysqli,$sql)

}

$mysqli_endTime

=

microtime(true)

$mysqli_time

=

$mysqli_endTime

-

$mysqli_startTime

echo

$mysqli_time

echo

"<hr/>"

if($pdo_time

>

$mysqli_time){

echo

"pdo的执行时间是mysqli的".round($pdo_time/$mysqli_time)."倍"

}else{

echo

"mysqli的执行时间是pdo的".round($mysqli_time/$pdo_time)."倍"

}

测试结果:其实经过多次测试,pdo和mysqli的执行效率差不多。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo *** 作数据库技巧总结》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库 *** 作入门教程》及《php常见数据库 *** 作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

您可能感兴趣的文章:php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例php中数据库连接方式pdo和mysqli对比分析php中关于mysqli和mysql区别的一些知识点分析php *** 作mysqli(示例代码)php封装的mysqli类完整实例PHP以mysqli方式连接类完整代码实例php简单解析mysqli查询结果的方法(2种方法)php中mysql连接方式PDO使用详解Php中用PDO查询Mysql来避免SQL注入风险的方法php

mysql

PDO

查询 *** 作的实例详解PHP实现PDO的mysql数据库 *** 作类

<?php

$con=mysql_connect('localhost','root')

or

die("Could

not

connect

:"

.

mysql_error())

mysql_query("SET

NAMES

gbk")

mysql_select_db("数据库名称")

or

die("Could

not

select

database")

?>

不能说是完整,至少在我这是好用的!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7299878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存