您的位置:首页 > 数据库 > MySQL

mysqli的多条sql语句操作以及简单的事务处理~~~~~

2016-10-03 21:26 609 查看

首先介绍一下多条sql语句的操作~~~~~

普通的方法: $mysqli->query();

通知他们执行方法 : $mysqli->multi_query();

拼接sql语句

//更新数据(其他的删除,)
$sql =  "UPDATE zd_admin SET level = 1 WHERE id = 1;";
$sql .= "UPDATE zd_message SET price = 1 WHERE id =1;";
$sql .= "UPDATE zd_login SET level = 1 WHERE id = 1";


如果是更新语句的话,无论是哪种方法都可以。

但是如果是查询,添加语句的话,因为我们需要查找数据,直接用query就不行

所以要学会使用multi_query()是很重要的

例如:拼接sql语句

//查询语句
sql =  "SELECT * FROM zd_admin;";
$sql .= "SELECT * FROM zd_message;";
$sql .= "SELECT * FROM zd_login;";


- 介绍两个个函数

$mysqli->store_result():将数据的结果集取出来
$mysqli->next_result():执行下一个sql语句
思路:这样子的话,首先执行第一sql条,然后获取到数据,进行CURL操作之后,通知它可以执行第二条sql语句..................


注意:$mysqli->multi_query(); 得到的结果true or false,而true or false 是根据第一条sql语句决定



//查询数据
$sql =  "SELECT * FROM zd_admin;";
$sql .= "SELECT * FROM zd_message;";
$sql .= "SELECT * FROM zd_login;";
$data = $mysqli->multi_query($sql);
//获取结果集合的数据,否则结果集是返回1
$data = $mysqli->store_result();
if(!$data){
echo "第一条sql语句有误";
exit;}
print_r($data->fetch_row());
echo "<br/>";
//将指针移动到下一条sql语句
$mysqli->next_result();
$data = $mysqli->store_result();
if(!$data){
echo "第二条sql语句有误";
exit;  }
print_r($data->fetch_row());
echo "<br/>";
//将指针移动到下一条sql语句
$mysqli->next_result();
$data = $mysqli->store_result();
if(!$data){
echo "第三条sql语句有误";
exit;
}
print_r($data->fetch_row());


===============

事务处理!!!

介绍几个函数

//关闭提交,默认的话是自动提交的
$mysqli->autocommit(false);
//手动提交。
$mysqli->commit();
//执行回滚
$mysqli->rollback();
这三个的详细可以查看php手册,这里不讲


在第一步操作之前首先先确定一下自己数据库的搜索引擎:修改成为InooDB

步骤: 进入phpmyadmin->选择数据库->数据表->操作->选择存储引擎



1. 首先你必须关闭自动提交数据

2. 拼写sql语句,必须同时运行成功才进行数据库操作,否则不操作

3. 判断每一个sql语句是否执行成功

4. 根据判断的结果决定是执行回滚还是提交操作

附上源码:

<?php
header("Content-Type:text/html;Charset=utf-8");
//连接数据库
$mysqli = new mysqli('localhost','root','','test');
//处理连接错误
if(mysqli_connect_errno()){
echo "数据库连接失败,失败原因:".mysqli_connect_error();
exit();
}
//设置一下编码
$mysqli->set_charset('utf8');
//关闭提交,默认的话是自动提交的
$mysqli->autocommit(false);
//创建一个SQL语句,必须同时运行成功,不能出现一个成功,一个失败
$sql = "UPDATE zd_login  SET level = level + 100 WHERE id = 1;";
$sql .="UPDATE zd_message  SET price = price - 100 WHERE id = 1";
//判断第一条sql语句是否错误
if($mysqli->multi_query($sql)){
//判断影响的条数是否为1,
$success = $mysqli->affected_rows == 1 ? true : false;
//这个是可以省略的,这里是给我输出sql语句的错误信息,查找sql错误的时候有用
if($mysqli->errno){
echo $mysqli->error;
exit;
}
//下移指针,后马上进行了第二条sql语句的操作
$mysqli->next_result();
if($mysqli->errno){
echo $mysqli->error;
exit;
}
$success2 = $mysqli->affected_rows == 1 ? true :false;
//如果两条数据都成功的话
if($success&&$success2){
//手动提交。
$mysqli->commit();
echo "完美提交";
exit;
}else{
//执行回滚
$mysqli->rollback();
echo "所有操作归零";
exit;
}
}else{
echo "第一条sql语句错误";
exit;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql mysqli