因为dml返回的是布尔值,所以处理起来也比较好处理。先创建表,顺便插入一条数据如下:
create database test; use test; create table users( id int(8) unsigned auto_increment primary key, name varchar(128) not null, password varchar(256) not null); insert into users(name,password) values('test','13579');下面就是批量执行dml操作的代码:
<?php $mysqli=new mysqli("localhost","root","XFAICL1314","test"); if ($mysqli->connect_error){ echo "连接失败"; } $sqli="insert into users(name,password) values ('小利',md5('13568'));"; //批量执行dml操作时,注意上一级句的;和下一句的.两个符号 $sqli.="insert into users(name,password) values ('小利',md5('13568'));"; $sqli.="insert into users(name,password) values ('小利和小峰',md5('13568'))"; $b=$mysqli->multi_query($sqli); if (!$b){ echo "插入失败"; }else{ echo "ok!"; } $mysqli->close(); ?>然后访问页面,返回ok,说明插入到数据库了,现在打开数据库查看,果然插入进去了,如下图:
批量执行dql操作的作用是一次性取回多个结果集,下面看案例代码:
<?php header("Content-type:text/html;charset=utf-8"); $mysqli=new mysqli("localhost","root","XFAICL1314","test"); if ($mysqli->connect_error){ echo "连接失败"; } $sqli="select * from users;"; $sqli.="select * from lsp"; //因为multi_query这个函数比较傻,不会去判断有没有下一个结果集,所以最后再用more_results函数检查一下。 if ($mysqli->multi_query($sqli)){ do{ //从mysqli中取出第一个结果集 $result=$mysqli->store_result(); //显示mysqli $res对象 while ($row=$result->fetch_row()){ foreach ($row as $key=>$val){ echo "--$val"; } echo "<br>"; } $result->free(); //判断有没有下一个结果集,如果没有退出循环 if (!$mysqli->more_results()){ break; } echo "<br>*************新得结果集<br/>"; } while ($mysqli->next_result()); } ?>结果如下图:
关于MySQL的批量执行sql语句就说到这里。 MySQL事务控制
上面简单介绍了MySQL扩展库,MySQLI扩展库,批量执行SQL语句,接下来说一说MySQL事务控制。
数据库配置说MySQL事务控制之前,先查看并修改数据库引擎,查看引擎的命令如下:
show engines
我们发现,只有InnoDB是支持事务的,所以先查看一下现在得数据库引擎:
发现是MyISAM,我们将它修改为InnoDB,打开配置文件my.ini,将“default-storage-engine=MYISAM”改为你想设定的,然后重启即可。修改成功后,然后下一步就是代码实现。 案例
我们为什么需要事务控制呢?想一想,如果这是一个转账得场景,是不是需要同时控制住,必须我减金额得同时你加金额,任何一个出错都得转账失败。也就是说要保持一致。这也是要进行事务控制得必要性。下面看案例代码:
<?php header("Content-type:text/html;charset=utf-8"); $mysqli=new mysqli("localhost","root","XFAICL1314","test"); if ($mysqli->connect_error){ echo "连接失败"; } //将提交设置为假,因为事物一旦提交就没有机会回滚 $mysqli->autocommit(false); $sql1="update person set money=money-3 where id=1"; //这里第二条语句我故意写错表名 $sql2="update persons set money=money+3 where id=2"; $b1=$mysqli->query($sql1); $b2=$mysqli->query($sql2); if (!$b1 || !$b2){ echo "修改失败,回滚".$mysqli->error; $mysqli->rollback(); }else{ echo "修改成功!"; $mysqli->commit(); } $mysqli->close(); ?>当我们提交页面后,查询数据库,发现数据没有变化,说明回滚有效果,事务控制起了效果,事务控制就说到这里。以上就是本篇文章的全部内容啦,如有错误,请斧正。