对于update、insert、delete请参考http://www.cnblogs.com/-beyond/p/8457580.html

执行select,如果SQL语句执行成功,那么返回的是一个mysqli_result对象,如果SQL语句出错,则返回false。

<?php
$mysqli = new Mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno ){
die( $mysqli->connect_error );
}
$mysqli->set_charset("utf8");
$sql = "select * from mysqli;";
$mysqli_result = $mysqli->query($sql);
if( ! $mysqli_result ){
echo "error:".$mysqli->errno." : ".$mysqli->error;
} else {
print_r( $mysqli_result ); //打印查看会是一个mysqli_result对象
}
$mysqli->close();
?>

  结果如下:

mysqli_result Object
(
[current_field] => 0
[field_count] => 2
[lengths] =>
[num_rows] => 3
[type] => 0
)

  上面的这几项都是mysqli_result类的成员属性,都是可以通过mysqli_result的对象加 ->属性访问,比如查看结果集的条数

<?php
$mysqli = new Mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno ){
die( $mysqli->connect_error );
}
$mysqli->set_charset("utf8");
$sql = "select * from mysqli;";
$mysqli_result = $mysqli->query($sql);
if( ! $mysqli_result ){
echo "error:".$mysqli->errno." : ".$mysqli->error;
} else {
echo $mysqli_result->num_rows;
}
$mysqli->close();
?>

  

获取完整结果集

  使用mysql_result::fetch_all([fetch_type])方法获取一个索引数组的结果集,该结果集为完整的结果集;

  参数fetch_type可以为MYSQLI_NUM(索引数组,默认)、MYSQLI_ASSOC(关联数组)、MYSQLLI_BOTH(两者都要),但是这个方法只适用于mysqlnd,mysqlnd在PHP5.4以后已经作为默认驱动,

<?php
$mysqli = new Mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno ){
die( $mysqli->connect_error );
}
$mysqli->set_charset("utf8");
$sql = "select * from mysqli;";
$mysqli_result = $mysqli->query($sql);
if( $mysqli_result && $mysqli_result->num_rows>0 ){
$res = $mysqli_result->fetch_all();
print_r($res);
} else {
echo "error:".$mysqli->errno." : ".$mysqli->error;
}
$mysqli->close();
?>

  结果如下:

Array
(
[0] => Array
(
[0] => 1
[1] => aaaa
) [1] => Array
(
[0] => 2
[1] => bbbb
) )

 

获取一条结果集

  移动内部指针:mysqli_result::data_seek( int offset ) 只需指定offset值即可。

  使用mysqli_result::fetch_row()来获取“指针所值”的一条数据,每取一次数据,指针指向下一条记录,结果以索引数组返回。

  使用mysqli_result::fetch_array([fetch_type]),参数fetch_type可以为MYSQLI_NUM(索引数组)、MYSQLI_ASSOC(关联数组)、MYSQLLI_BOTH(两者都要,默认)

  使用mysqli_result::fetch_assoc()来获取一条数据,和fetch_row类似,只不过返回的结果集是以关联数组形式。

  还可以使用fetch_object()以一个对象的形式返回。

<?php
$mysqli = new Mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno ){
die( $mysqli->connect_error );
}
$mysqli->set_charset("utf8");
$sql = "select * from mysqli;";
$mysqli_result = $mysqli->query($sql);
if( $mysqli_result && $mysqli_result->num_rows>0 ){ $res = $mysqli_result->fetch_row();
print_r( $res ); //Array ( [0] => 1 [1] => aaaa ) $mysqli_result->data_seek(0);
$res = $mysqli_result->fetch_array();
print_r( $res ); //Array ( [0] => 1 [id] => 1 [1] => aaaa [name] => aaaa ) $mysqli_result->data_seek(0);
$res = $mysqli_result->fetch_assoc();
print_r( $res ); //Array ( [id] => 1 [name] => aaaa ) } else {
echo "error:".$mysqli->errno." : ".$mysqli->error;
}
$mysqli->close();
?>

  

释放结果集

  mysqli_result::free

  mysqli_result::close

  mysqli_result::free_result

  这三者都可以

遍历结果集

在遍历结果集之前可以先判断结果集中是否有记录。

方法一:一次性获取(fetch_all),然后循环遍历

<?php
$mysqli = new Mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno ){
die( $mysqli->connect_error );
}
$mysqli->set_charset("utf8");
$sql = "select * from mysqli;";
$mysqli_result = $mysqli->query($sql);
if( $mysqli_result && $mysqli_result->num_rows>0 ){
$res = $mysqli_result->fetch_all();//一次性去的所有数据
foreach( $res as $row ) {
print_r( $row );
}
$mysqli_result->free_result(); //释放结果集
} else {
echo "error:".$mysqli->errno." : ".$mysqli->error;
}
$mysqli->close();
?>

  

方法二:循环获取(fetch_array、fetch_assoc、fetch_row)

<?php
$mysqli = new Mysqli();
$mysqli->connect("localhost","root","root","test");
if ( $mysqli->connect_errno ){
die( $mysqli->connect_error );
}
$mysqli->set_charset("utf8");
$sql = "select * from mysqli;";
$mysqli_result = $mysqli->query($sql);
if( $mysqli_result && $mysqli_result->num_rows>0 ){
while( $row = $mysqli_result->fetch_assoc() ){
print_r( $row );
}
$mysqli_result->free_result(); //释放结果集
} else {
echo "error:".$mysqli->errno." : ".$mysqli->error;
}
$mysqli->close();
?>

  

  

MySQLi面向对象实践--select的更多相关文章

  1. MySQLi面向对象实践--multi_query

    使用multi_query可以实现执行多条SQL语句,每一条SQL语句通过分号分隔. 需要注意的是: 多条用分号分隔的SQL语句中,只要有一条SQL语句执行失败,那么这一条SQL语句以及之后的SQL语 ...

  2. MySQLi面向对象实践--insert、update、delete

    执行insert <?php $mysqli = new Mysqli(); $mysqli->connect("localhost","root" ...

  3. Mysqli面向对象操作数据库

    Mysqli面向对象操作数据库 首先配置一下数据库: 接着用PHP中的Mysqli扩展库面向对象查询这个数据表. 操作分为以下几个步骤: 连接数据库 操作数据库 处理结果 关闭资源 <?php ...

  4. MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL

    [转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...

  5. PHP中用mysqli面向对象打开连接关闭mysql数据库

    代码如下: <meta http-equiv="content-type" content="text/html" charset="utf-8 ...

  6. C++面向对象实践

    实践如下: class Person{ private: int age; ]; int hight; public: Person(int age, int hight, char* name); ...

  7. Golang的面向对象实践method

    最近在系统的学习go的语法,一切都弄好了之后准备弄个im项目出来玩.在这个过程中会把看到有趣的写法和语法啥的拿出来分析一下. 我一直以为go语言对面向对象没有支持,但是后面看到了类似类的概念,meth ...

  8. Mysql学习实践---SELECT INTO的替代方案

    从一个表复制数据,然后把数据插入到另一个新表中. 假设有一个已创建且有数据的orders表,要把orders表备份到还未创建的newOrders表里 SQL用法:SELECT * INTO newOr ...

  9. Javascript 面向对象实践

    踩到了坑,才能学到东西. 记录我在慢慢的转向模块化遇到的问题以及解决的思路. 1.采用立即执行函数,闭包的方式创建模块 html: <!DOCTYPE html> <html lan ...

随机推荐

  1. SQL 加载

    首先新建表 第一张表 order_info 第二张表 user_info 登录mysql mysql -u root -p 在开始加载数据之前配置编码 查看默认编码 show variables li ...

  2. 转://oracle 11G+ASM for Linux手工建库

    环境描述 环境:Oracle Linux 6.5 + ORACLE 11g R2+ASM ORACLE的程序已经安装完毕.但是没有创建任何数据库. 实验内容 安装ORACLE11g数据库,不使用DBC ...

  3. Java部署环境搭建(Linux)

    环境搭建必须jdk.tomcat.mysql(基础) 额外的软件包项目中可能用到 jdk:它包含jre和开发所需完整类库. tomcat:它是一个web容器,项目通常往webapps下扔,便于外界访问 ...

  4. 一个网工的Linux学习过程

    机缘巧合下,在快要毕业时找到了一份网络工程师的工作,对于学习通信工程的我来说,也不算是跨专业就业吧.在入职之前也了解了一下网络工程师的学习路径,网络工程师是从事计算机信息系统的设计.建设.运行和维护工 ...

  5. 关于python3.x语法

    注1:该文章中所有的图示均使用的pycharm 注2:#号后面没有声明的均为运算结果 #用井字符开头的是单行注释 """ 多行字符串用三个引号 包裹,也常被用来做多 行注 ...

  6. node通过http.request向其他服务器上传文件

    function upload(callback) { let boundaryKey = '----' + new Date().getTime(); // 用于标识请求数据段 let option ...

  7. [Oracle]OWI学习笔记--001

    [Oracle]OWI学习笔记--001 在 OWI 的概念里面,最为重要的是 等待事件 和 等待时间. 等待事件发生时,需要通过 P1,P2,P3 查看具体的资源. 可以通过 v$session_w ...

  8. SAAS云平台搭建札记: (一) 浅论SAAS多租户自助云服务平台的产品、服务和订单

    最近在做一个多租户的云SAAS软件自助服务平台,途中遇到很多问题,我会将一些心得.体会逐渐分享出来,和大家一起探讨.这是本系列的第一篇文章. 大家知道,要做一个全自助服务的SAAS云平台是比较复杂的, ...

  9. 系统引导修复,grub2下的各种骚作

    新买的xps装了一个rhel7.5,各种恶心... 第一次:升级内核之后居然引导不了! 进入bios setup,把bios 引导的文件选择为 grub64.eif,成功进入系统 第二次:升级grub ...

  10. synchronized和Lock的异同

    JAVA语言使用两种机制来实现堆某种共享资源的同步,synchronized和Lock.其中,synchronized使用Object对象本身的notify.wait.notifyAll调度机制,而l ...