三、执行多条 SQL 语句
有的时候 , 我们需要在一张页面上同时执行多条SQL语句 , 之前的方法就是分别创建多个结果集然后使用。但这样资源消耗很大,也不利于管理。 PHP 提供了执行多条 SQL 语句的方法 $_mysqli ->multi_query();
// 创建多条 SQL 语句
$_sql .= "SELECT * FROM tg_user;" ;
$_sql .= "SELECT * FROM tg_photo;" ;
$_sql .= "SELECT * FROM tg_article" ;
// 开始执行多条 SQL 语句
if ( $_mysqli ->multi_query($_sql)) {//$_mysqli ->multi_query($_sql)只能判断第一条sql语句是否正确
$_result = $_mysqli ->store_result();// 获取当前结果集指针所在位置的SQL语句执行的结果集
print_r( $_result ->fetch_array());
$_mysqli ->next_result();// 将结果集指针移到下一个
$_result = $_mysqli ->store_result();
if(!$_result){echo '第二条sql语句有误'; exit();}
print_r( $_result ->fetch_array());
$_mysqli ->next_result();
$_result = $_mysqli ->store_result();
if(!$_result){echo '第三条sql语句有误'; exit();}
print_r( $_result ->fetch_array());
} else {
echo '第一条sql 语句有误! ' ;
}
6. 执行数据库事务
事务 (transaction) 是作为整个一个单元的一组有序的数据库操作 。 如果一组中的所有操作都成功 , 则认为事务成功 , 即使只有一个失败操作 , 事务也不成功 。 如果所有操作成功完成 , 事务则提交 (commit) , 其修改将作用于所有其他数据库进程 。 如果一个操作失败 , 则事务将回滚 (roll back) ,该事务所有操作的影响都将取消。
首先 , 您的 MySQL 是 MyISAM 或 BDB 引擎的一种 , 一般来说 , 你安装了 AppServ 的集成包 , 你选择 MyISAM 的引擎的数据库即可 。 如果你建立的表不是 MyISAM , 可以在 phpmyadmin里修改。
// 首先你必须关闭自动提交数据
$_mysqli ->autocommit( false );
// 创建一个 SQL 语句 ,必须同时运行成功,不能出现一个成功,一个失败
$_sql .= "UPDATE tg_friend SET tg_state=tg_state+5 WHERE tg_id=1;" ;
$_sql .= "UPDATE tg_flower SET tg_flower=tg_flower-5 WHERE tg_id=1;" ;
if ( $_mysqli ->multi_query( $_sql )) {// 执行两条 SQL 语句
$_success = $_mysqli ->affected_rows == 1 ? true : false ;// 获取第一条 SQL 一影响的行数
$_mysqli ->next_result();// 下移,第二条 SQL
$_success2 = $_mysqli ->affected_rows == 1 ? true : false ;// 获取第二条 SQL 影响的行数
if ( $_success && $_success2 ) {// 判断是否都正常通过了
$_mysqli ->commit(); //提交
echo ' 提交成功! ' ;
} else {
$_mysqli ->rollback(); // 回滚
echo '程序出现异常!' ;
}
} else {echo "第一句SQL 语句有误" ;}
// 最后还必须开启自动提交
$_mysqli ->autocommit( true );
- 本文固定链接: https://www.qingheluo.com/mysqlimianxiangduixiangdeshiyong02/
- 转载请注明: qingheluo 于 清河洛 发表