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

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

  1. <?php
  2. $mysqli = new Mysqli();
  3. $mysqli->connect("localhost","root","root","test");
  4. if ( $mysqli->connect_errno ){
  5. die( $mysqli->connect_error );
  6. }
  7. $mysqli->set_charset("utf8");
  8. $sql = "select * from mysqli;";
  9. $mysqli_result = $mysqli->query($sql);
  10. if( ! $mysqli_result ){
  11. echo "error:".$mysqli->errno." : ".$mysqli->error;
  12. } else {
  13. print_r( $mysqli_result ); //打印查看会是一个mysqli_result对象
  14. }
  15. $mysqli->close();
  16. ?>

  结果如下:

  1. mysqli_result Object
  2. (
  3. [current_field] => 0
  4. [field_count] => 2
  5. [lengths] =>
  6. [num_rows] => 3
  7. [type] => 0
  8. )

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

  1. <?php
  2. $mysqli = new Mysqli();
  3. $mysqli->connect("localhost","root","root","test");
  4. if ( $mysqli->connect_errno ){
  5. die( $mysqli->connect_error );
  6. }
  7. $mysqli->set_charset("utf8");
  8. $sql = "select * from mysqli;";
  9. $mysqli_result = $mysqli->query($sql);
  10. if( ! $mysqli_result ){
  11. echo "error:".$mysqli->errno." : ".$mysqli->error;
  12. } else {
  13. echo $mysqli_result->num_rows;
  14. }
  15. $mysqli->close();
  16. ?>

  

获取完整结果集

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

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

  1. <?php
  2. $mysqli = new Mysqli();
  3. $mysqli->connect("localhost","root","root","test");
  4. if ( $mysqli->connect_errno ){
  5. die( $mysqli->connect_error );
  6. }
  7. $mysqli->set_charset("utf8");
  8. $sql = "select * from mysqli;";
  9. $mysqli_result = $mysqli->query($sql);
  10. if( $mysqli_result && $mysqli_result->num_rows>0 ){
  11. $res = $mysqli_result->fetch_all();
  12. print_r($res);
  13. } else {
  14. echo "error:".$mysqli->errno." : ".$mysqli->error;
  15. }
  16. $mysqli->close();
  17. ?>

  结果如下:

  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [0] => 1
  6. [1] => aaaa
  7. )
  8.  
  9. [1] => Array
  10. (
  11. [0] => 2
  12. [1] => bbbb
  13. )
  14.  
  15. )

 

获取一条结果集

  移动内部指针: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()以一个对象的形式返回。

  1. <?php
  2. $mysqli = new Mysqli();
  3. $mysqli->connect("localhost","root","root","test");
  4. if ( $mysqli->connect_errno ){
  5. die( $mysqli->connect_error );
  6. }
  7. $mysqli->set_charset("utf8");
  8. $sql = "select * from mysqli;";
  9. $mysqli_result = $mysqli->query($sql);
  10. if( $mysqli_result && $mysqli_result->num_rows>0 ){
  11.  
  12. $res = $mysqli_result->fetch_row();
  13. print_r( $res ); //Array ( [0] => 1 [1] => aaaa )
  14.  
  15. $mysqli_result->data_seek(0);
  16. $res = $mysqli_result->fetch_array();
  17. print_r( $res ); //Array ( [0] => 1 [id] => 1 [1] => aaaa [name] => aaaa )
  18.  
  19. $mysqli_result->data_seek(0);
  20. $res = $mysqli_result->fetch_assoc();
  21. print_r( $res ); //Array ( [id] => 1 [name] => aaaa )
  22.  
  23. } else {
  24. echo "error:".$mysqli->errno." : ".$mysqli->error;
  25. }
  26. $mysqli->close();
  27. ?>

  

释放结果集

  mysqli_result::free

  mysqli_result::close

  mysqli_result::free_result

  这三者都可以

遍历结果集

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

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

  1. <?php
  2. $mysqli = new Mysqli();
  3. $mysqli->connect("localhost","root","root","test");
  4. if ( $mysqli->connect_errno ){
  5. die( $mysqli->connect_error );
  6. }
  7. $mysqli->set_charset("utf8");
  8. $sql = "select * from mysqli;";
  9. $mysqli_result = $mysqli->query($sql);
  10. if( $mysqli_result && $mysqli_result->num_rows>0 ){
  11. $res = $mysqli_result->fetch_all();//一次性去的所有数据
  12. foreach( $res as $row ) {
  13. print_r( $row );
  14. }
  15. $mysqli_result->free_result(); //释放结果集
  16. } else {
  17. echo "error:".$mysqli->errno." : ".$mysqli->error;
  18. }
  19. $mysqli->close();
  20. ?>

  

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

  1. <?php
  2. $mysqli = new Mysqli();
  3. $mysqli->connect("localhost","root","root","test");
  4. if ( $mysqli->connect_errno ){
  5. die( $mysqli->connect_error );
  6. }
  7. $mysqli->set_charset("utf8");
  8. $sql = "select * from mysqli;";
  9. $mysqli_result = $mysqli->query($sql);
  10. if( $mysqli_result && $mysqli_result->num_rows>0 ){
  11. while( $row = $mysqli_result->fetch_assoc() ){
  12. print_r( $row );
  13. }
  14. $mysqli_result->free_result(); //释放结果集
  15. } else {
  16. echo "error:".$mysqli->errno." : ".$mysqli->error;
  17. }
  18. $mysqli->close();
  19. ?>

  

  

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. 为什么MySQL数据库索引选择使用B+树?

    在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使 ...

  2. python五十四课——datetime模块

    3.datetime模块:理解:datetime可以认为是time模块的补充/扩展datetime模块中有一些常用类:datetime类:记录了日期和时间数据信息date类:记录了日期数据信息time ...

  3. 每周一个linux命令之---uptime详解

    每周一个linux命令之---uptime详解 linux命令 uptime详解 引言:从今天开始,每周更新一个对程序员有用的linux命令,我真的没敢写每天一个,我怕我坚持不下去,每周一个还是可以的 ...

  4. rsyslog和logrotate服务

    参考: http://www.lampbo.org/others/opensource/rsyslog-config-file-detail.html http://bangerlee.blog.ch ...

  5. P1-Linux下安装MySQL及登录用户配置

    Linux下安装MySQL及登录用户配置 环境:Centos7.4    Mysql5.6 1. 查询是否安装 MySQL和MariaDB rpm -qa | grep -i mysql rpm -q ...

  6. 理解Express express.static 和 __direname 及 __firename的含义

    理解Express express.static 和 __direname 及 __firename的含义 一:理解 app.use(express.static(__direname + '/pub ...

  7. http协议以及get和post请求

    HTTP协议是网络传输信息的一种规范. 就好比两个人之间的交流,甲只会讲英语,乙只会说汉语,结果是他们必然无法开怀畅谈. HTTP协议也类   GET 请求获取 Request-URI 所标识的资源 ...

  8. Luogu P3372 【模板】线段树 1

    qwq #include<cstdio> using namespace std; ; int n,m,x,y,flag; *maxn],r[*maxn]; *maxn],sum[*max ...

  9. <转>浏览器缓存机制

    本篇博客转载自github,原文地址:浏览器缓存篇 前言 在前端开发中,缓存有利于加快网页的加载速度,同时缓存能够被反复利用,所以可以减少流量和带宽的开销. 缓存的分类有很多种,CDN缓存.数据库缓存 ...

  10. 软概(lesson 1):Javaweb实现用户登录界面

    一.问题描述 二.网站系统开发所需要的技术 网站界面开发:html 后台所需要的技术:java基本内容,数据库语句,连接数据库实现增删改查 本题所用技术:数据库链接以及增加功能,基本html语句 技术 ...