首先介绍一下多条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 "
";
//将指针移动到下一条sql语句
$mysqli->next_result();
$data = $mysqli->store_result();
if(!$data){
echo "第二条sql语句有误";
exit; }
print_r($data->fetch_row());
echo "
";
//将指针移动到下一条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. 根据判断的结果决定是执行回滚还是提交操作
附上源码:
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;
}