MySQLi面向对象实践--select
对于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的更多相关文章
- MySQLi面向对象实践--multi_query
使用multi_query可以实现执行多条SQL语句,每一条SQL语句通过分号分隔. 需要注意的是: 多条用分号分隔的SQL语句中,只要有一条SQL语句执行失败,那么这一条SQL语句以及之后的SQL语 ...
- MySQLi面向对象实践--insert、update、delete
执行insert <?php $mysqli = new Mysqli(); $mysqli->connect("localhost","root" ...
- Mysqli面向对象操作数据库
Mysqli面向对象操作数据库 首先配置一下数据库: 接着用PHP中的Mysqli扩展库面向对象查询这个数据表. 操作分为以下几个步骤: 连接数据库 操作数据库 处理结果 关闭资源 <?php ...
- MySQL原生API、MySQLi面向过程、MySQLi面向对象、PDO操作MySQL
[转载]http://www.cnblogs.com/52fhy/p/5352304.html 本文将举详细例子向大家展示PHP是如何使用MySQL原生API.MySQLi面向过程.MySQLi面向对 ...
- PHP中用mysqli面向对象打开连接关闭mysql数据库
代码如下: <meta http-equiv="content-type" content="text/html" charset="utf-8 ...
- C++面向对象实践
实践如下: class Person{ private: int age; ]; int hight; public: Person(int age, int hight, char* name); ...
- Golang的面向对象实践method
最近在系统的学习go的语法,一切都弄好了之后准备弄个im项目出来玩.在这个过程中会把看到有趣的写法和语法啥的拿出来分析一下. 我一直以为go语言对面向对象没有支持,但是后面看到了类似类的概念,meth ...
- Mysql学习实践---SELECT INTO的替代方案
从一个表复制数据,然后把数据插入到另一个新表中. 假设有一个已创建且有数据的orders表,要把orders表备份到还未创建的newOrders表里 SQL用法:SELECT * INTO newOr ...
- Javascript 面向对象实践
踩到了坑,才能学到东西. 记录我在慢慢的转向模块化遇到的问题以及解决的思路. 1.采用立即执行函数,闭包的方式创建模块 html: <!DOCTYPE html> <html lan ...
随机推荐
- 为什么MySQL数据库索引选择使用B+树?
在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使 ...
- python五十四课——datetime模块
3.datetime模块:理解:datetime可以认为是time模块的补充/扩展datetime模块中有一些常用类:datetime类:记录了日期和时间数据信息date类:记录了日期数据信息time ...
- 每周一个linux命令之---uptime详解
每周一个linux命令之---uptime详解 linux命令 uptime详解 引言:从今天开始,每周更新一个对程序员有用的linux命令,我真的没敢写每天一个,我怕我坚持不下去,每周一个还是可以的 ...
- rsyslog和logrotate服务
参考: http://www.lampbo.org/others/opensource/rsyslog-config-file-detail.html http://bangerlee.blog.ch ...
- P1-Linux下安装MySQL及登录用户配置
Linux下安装MySQL及登录用户配置 环境:Centos7.4 Mysql5.6 1. 查询是否安装 MySQL和MariaDB rpm -qa | grep -i mysql rpm -q ...
- 理解Express express.static 和 __direname 及 __firename的含义
理解Express express.static 和 __direname 及 __firename的含义 一:理解 app.use(express.static(__direname + '/pub ...
- http协议以及get和post请求
HTTP协议是网络传输信息的一种规范. 就好比两个人之间的交流,甲只会讲英语,乙只会说汉语,结果是他们必然无法开怀畅谈. HTTP协议也类 GET 请求获取 Request-URI 所标识的资源 ...
- Luogu P3372 【模板】线段树 1
qwq #include<cstdio> using namespace std; ; int n,m,x,y,flag; *maxn],r[*maxn]; *maxn],sum[*max ...
- <转>浏览器缓存机制
本篇博客转载自github,原文地址:浏览器缓存篇 前言 在前端开发中,缓存有利于加快网页的加载速度,同时缓存能够被反复利用,所以可以减少流量和带宽的开销. 缓存的分类有很多种,CDN缓存.数据库缓存 ...
- 软概(lesson 1):Javaweb实现用户登录界面
一.问题描述 二.网站系统开发所需要的技术 网站界面开发:html 后台所需要的技术:java基本内容,数据库语句,连接数据库实现增删改查 本题所用技术:数据库链接以及增加功能,基本html语句 技术 ...