对于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. Django复习之ORM

    QuerySet数据类型:                        1.可切片,可迭代      [obj,....]                    2.惰性查询:            ...

  2. ORB-SLAM2(4) 离线双目数据测试

    官网 https://github.com/raulmur/ORB_SLAM2 1从http://www.cvlibs.net/datasets/kitti/eval_odometry.php下载数据 ...

  3. ROS 订阅图像节点

    博客 http://blog.csdn.net/github_30605157/article/details/50990493 参考ROS原网站 http://wiki.ros.org/image_ ...

  4. 【转】Emgu 图像阈值

    原文地址:http://www.cnblogs.com/CoverCat/p/5043833.html 转载,备查 Visual Studio Community 2015 工程和代码:http:// ...

  5. 如何用css实现"等高布局"。

    有时候为了让网页实现美观,在不知道高度的情况下,我们要用css实现等高布局效果,传统的方法, 我们可以用javascript实现,但是由于需求决定或者其他的情况下,我们只能用css实现,其方法主要是采 ...

  6. mysql 数据库表备份和还原

    #!/bin/bash #ip地址 HOST=localhost #用户名 USER=claim #密码 PASSWORD=Pw123456! #数据库名称 DATABASE=claim_oauth2 ...

  7. AI 反向传播神经网络

    反向传播(Back Propagation,简称BP)神经网络

  8. ESP32 ADC

    2个12位的ADC,共计18通道,ADC2比较特殊的一点就是:ADC2和wifi共用,wifi的优先级更高,所以ADC2只有在WIFI模块不用的情况下好使: 在读取ADC数据之前,必须先对ADC进行设 ...

  9. Luogu4768 NOI2018 归程 最短路、Kruskal重构树

    传送门 题意:给出一个$N$个点.$M$条边的图,每条边有长度和海拔,$Q$组询问,每一次询问从$v$开始,经过海拔超过$p$的边所能到达的所有点中到点$1$的最短路的最小值,强制在线.$N \leq ...

  10. 使用第三方库(Senparc)完成小程序支付 - z

    https://www.cnblogs.com/zmaiwxl/p/8931585.html