mysqli的 mulit_query执行多条语句。

正常情况下,我们使用mysqli::query($sql) 来查询一条语句,如果多条语句查询,使用mysqli的这个方法就不可以了,需要使用 mysqli::multi_query() 的方法。multi_query() 返回的是一个bool类型,也就是只要第一个sql是正确的,返回true。

使用 mysqli 类中的  store_result() 方法返回所有的结果集。

使用 mysqli类中的   more_results() 方法返回是否还有更多的结果集。

使用 mysqli类中的   next_result() 方法,获得下一个结果集。

可以以数组类比:store_result 相当于一个数组,next_result 相当于指针移动到下一个数组元素, more_result 相当于数组在当前指针的情况下,是否还有未访问的元素。

<?php
header(‘Content-type:text/html;Charset=utf-8‘);
//error_reporting(E_ALL && E_NOTICE);
define(‘DB_HOST‘, ‘127.0.0.1‘);
define(‘DB_USER‘,‘root‘);
define(‘DB_PWD‘,‘123456‘);
define(‘DB_NAME‘,‘test‘);
$start = microtime(true);
//连接数据库
$_mysqli = new mysqli(DB_HOST,DB_USER,DB_PWD);
if(mysqli_connect_errno()){
    die(‘数据库连接错误!‘.mysqli_connect_error());
}
//选择数据库,设置编码
$_mysqli->select_db(DB_NAME);
$_mysqli->set_charset(‘utf8‘);

$_sql = ‘‘;
$_sql .= "select * from ecs_goods where goods_id = 5;";
$_sql .= "select * from ecs_goods where goods_id = 15;";
$_sql .= "select * from ecs_goods where goods_id = 25;";
$_sql .= "select * from ecs_goods where goods_id = 55;";//无该条记录
$_sql .= "select * from ecs_goods where goods_id = 35";
if($_mysqli->multi_query($_sql)){
    do{
        $_result = $_mysqli->store_result();
        $_row = $_result->fetch_row();
        echo $_row[0];
        echo ‘<br />‘;
        $_result->free();//释放当前结果集
    }while($_mysqli->more_results() && $_mysqli->next_result());//如果next_result 写在前面无法获得最后一条记录
}else{
    echo(‘第一条语句出错!‘);
    exit();
}
$_mysqli->close();

?>

结果:
5
15
25

35

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

当然,以上例子每个sql语句的结果只有一条或者是没有记录,如果sql语句有多条记录。比如:

$_sql = ‘‘;
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id in(1,2,32,4);";
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id in(3,7,9);";
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id = 25;";
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id = 55;";//无该条记录
$_sql .= "select goods_id,goods_name,goods_sn from ecs_goods where goods_id = 35";

其中1,2语句都是多条记录。以下方式实现。

do{
        $_result = $_mysqli->store_result();
        while($_row = $_result->fetch_row()){
             echo($_row[0]);
             echo ‘<br />‘;
        }
        echo "<hr />";
        $_result->free();//释放当前结果集
    }while($_mysqli->more_results() && $_mysqli->next_result());//如果next_result 写在前面无法获得最后一条记录

结果:

时间: 2024-11-06 18:36:42

mysqli的 mulit_query执行多条语句。的相关文章

php+mysqli实现批量执行插入、更新及删除数据的方法

本文实例讲述了php+mysqli实现批量执行插入.更新及删除数据的方法.分享给大家供大家参考.具体如下: mysqli批量执行插入/更新/删除数据,函数为 multi_query(). 下面的代码只是批量插入数据,事实上,插入数据.更新数据.删除数据等可以混合一起执行.查询时使用该函数,读取数据有点不太一样,具体参考如下代码: <?php //1.创建数据库连接对象 $mysqli = new MySQLi("localhost","root","

MySql执行多条语句

http://www.cppblog.com/fwxjj/archive/2010/08/05/122258.html说是在连接上设置: //链接时设定 mysql_real_connect( ..., CLIENT_MULTI_STATEMENTS ); //或者 //中途指定 mysql_set_server_option( mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON ); //mysql是连接的名称 但是C#的驱动,没有找到设置的地方. 搜遍源码也没有.

MySqli 执行多条SQL语句

使用multi_query();  去执行SQL语句,执行多条语句多个SQL语句用“;”分开 一:没有结果集的语句: $sql="insert into products (cid,name,price,num) values('2','PHP','2.22','10');update products set cid='10',name='tong',price='33.33',num='20' where id > 10; delete from products where id&l

mysqli 操作数据库(转)

从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/mysql_config \ #使用 Mysql ClientLibrary(libmysql)构建 --with-mysqli=mysqlnd \ #使用 Mysql Native Dirver 即mysqlnd --with-pdo-mysql=mysqlnd #使用 Mysql Native

php操纵mysqli数据库

从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/mysql_config \ #使用 Mysql ClientLibrary(libmysql)构建 --with-mysqli=mysqlnd \ #使用 Mysql Native Dirver 即mysqlnd --with-pdo-mysql=mysqlnd #使用 Mysql Native

mysql -- 一次执行多条sql语句

最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.sql里的所有sql语句,这就涉及到执行多条语句的问题了.软件在CodeIgniter框架上开发的,CodeIgniter有封装好的执行sql语句的函数:$this->db->query('****'),但此函数一次只能执行一条sql语句.所以得另外想办法了.百度了下,找到了一些资料.multi_q

PHP的MySQLi函数库的使用 以及 表单的字符编码配置

1.什么是mysqli PHP-MySQL 函数库是 PHP 操作 MySQL 资料库最原始的扩展库,PHP-MySQLi 的 i 代表 Improvement ,相当于前者的改进增强版,也包含了相对进阶的功能,另外本身也增加了安全性,比如可以大幅度减少 SQL 注入等问题的发生. 2. mysql与mysqli的概念相关 (1)mysql与mysqli都是php方面的函数集,与mysql数据库关联不大. (2)在php5版本之前,一般是用php的mysql函数去驱动mysql数据库的,比如my

计算机程序的思维逻辑 (9) - 条件执行的本质【转】

条件执行 前面几节我们介绍了如何定义数据和进行基本运算,为了对数据有透彻的理解,我们介绍了各种类型数据的二进制表示. 现在,让我们回顾程序本身,只进行基本操作是不够的,为了进行有现实意义的操作,我们需要对操作的过程进行流程控制.流程控制中最基本的就是条件执行,也就 是说,某些操作只能在某些条件满足的情况下才执行,在一些条件下执行某种操作,在另外一些条件下执行另外某种操作.这与交通控制中的红灯停.绿灯行条件执行是类似的. Java中表达这种流程控制的基本语法是If语句. if if的语法为: if

计算机程序的思维逻辑 (9) - 条件执行的本质

条件执行 前面几节我们介绍了如何定义数据和进行基本运算,为了对数据有透彻的理解,我们介绍了各种类型数据的二进制表示. 现在,让我们回顾程序本身,只进行基本操作是不够的,为了进行有现实意义的操作,我们需要对操作的过程进行流程控制.流程控制中最基本的就是条件执行,也就 是说,某些操作只能在某些条件满足的情况下才执行,在一些条件下执行某种操作,在另外一些条件下执行另外某种操作.这与交通控制中的红灯停.绿灯行条件执行是类似的. Java中表达这种流程控制的基本语法是If语句. if if的语法为: if