,其他的都木有能初始化,这个时候就会导致用户表里的用户信息已经执行插入,导致提示注册失败,但是用户已经注册了部分信息,这个时候需要程序员去数据库删除相应的数据是一个比较不好的事情。
因此这边考虑使用事务,事务可以进行模拟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")
?>
不能说是完整,至少在我这是好用的!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)