php用mysqli从数据库中查询,在PHP中使用Mysqli操作数据库

PHP的 mysqli 扩展提供了其先行版本的所有功能,此外,由于 MySQL 已经是一个

具有完整特性的数据库服务器 , 这为PHP 又添加了一些新特性 。 而 mysqli 恰恰也支持了

这些新特性。

一. 建立和断开连接

与 MySQL数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并

选择一个数据库 , 以及最后关闭连接 。与 mysqli 几乎所有的特性一样 , 这一点可以使用面向

对象的方法来完成,也可以采用过程化的方式完成。

1. 创建一个 mysqli 的对象

$_mysqli = newmysqli();

2. 连接 MySQL的主机、用户、密码、数据库

$_mysqli->connect( 'localhost' , 'root' , 'yangfan' , 'guest' );

3. 创建带连接参数的 mysqli对象

$_mysqli = newmysqli( 'localhost' , 'root' , 'yangfan' , 'guest' );

4. 单独选择数据库

$_mysqli->select_db( 'testguest' );

5. 断开 MySQL

$_mysqli->close();

二. 处理连接错误

如果无法连接 MySQL数据库,那么这个页面不太可能继续完成预期的工作。因此,一

定要注意监视连接错误并相应地做出反应 。Mysqli 扩展包含有很多特性可以用来捕获错误信

息,例如:mysqli_connect_errno() 和 mysqli_connect_error() 方法。

mysqli_connect_errno()函数返回连接数据库返回的错误号。

Mysqli_connect_error()函数返回连接数据库返回的错误代码。

if(mysqli_connect_errno()) {

echo' 数据库连接错误,错误信息: ' .mysqli_connect_error();

exit();

}

errno属性返回数据库操作时的错误号。

error属性返回数据库操作时的错误代码。

if( $_mysqli ->errno) {

echo' 数据库操作时发生错误,错误代码是: ' . $_mysqli ->error;

}

三. 与数据库进行交互

绝大多数查询都与创建(Creation) 、获取 (Retrieval) 、更新 (Update) 和删除 (Deletion) 任

务有关,这些任务统称为 CRUD 。

1. 获取数据

网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送

SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出。

// 设置一下编码 utf8

$_mysqli->set_charset( "utf8" );

// 创建一句 SQL 语句

$_sql = "SELECT* FROM t g_user" ;

// 执行 sql 语句把结果集赋给$_result

$_result = $_mysqli->query( $_sql );

// 将结果集的第一行输出

print_r( $_result->fetch_row());

// 释放查询内存 ( 销毁 )

$_result->free();

2. 解析查询结果

一旦执行了查询并准备好结果集 ,下面就可以解析获取到的结果行了 。 你可以使用多个

方法来获取各行中的字段 ,具体选择哪一个方法主要取决于个人喜好 , 因为只是引用字段的

方法有所不同。

将结果集放到对象中

由于你可能会使用 mysqli的面向对象的语法 , 所以完全可以采用面向对象的方式管理结

果集。可以使用fetch_object() 方法来完成。

// 将结果集包装成对象

$_row = $_reslut->fetch_object();

// 输出对象中的一个字段(属性)

echo $_row->tg_username;

// 遍历所有的用户名称

while (!! $_row =$_reslut ->fetch_object()) {

echo$_row ->tg_username. '
' ;

}

使用索引数组和关联数组

// 将结果集包装成数组 ( 索引 +关联 )

$_row = $_reslut->fetch_array();

// 输出下标是 3 的字段(属性)

echo $_row [ 3 ];

// 将结果集包装成索引数组

$_row = $_reslut->fetch_row();

echo $_row [ 3 ];

// 将结果集包装成关联数组

$_row = $_reslut->fetch_assoc();

echo $_row ['tg_username' ];

3. 确定所选择的行和受影响的行

通常希望能够确定 SELECT查询返回的行数 , 或者受 INSERT 、 UPDATE 或 DELET 查询

影响的行数。我们可以使用num_rows 和 affected_rows 两个属性

// 当使用查询时,想了解 SELECT查询了多少行,可以使用 num_rows 。

echo $_reslut->num_rows;

// 当使用查询时 , 想了解SELECT 、 INSERT 、 UPDATE 、 DELETE 查询时影响的行

数,可以使用affected_rows; 注意,它是 $_mysqli 下的属性

echo $_mysqli->affected_rows;

4. 移动指针的操作和获取字段

当你并不想从第一条数据开始获取 ,或者并不想从第一个字段获取 , 你可以使用数据指

针移动或者字段指针移动的方式调整到恰当的位置。 当然 , 你还可以获取字段的名称及其相

关的属性。

// 计算有多少条字段

echo $_reslut->field_count;

// 获取字段的名称

$_field = $_reslut->fetch_field();

echo $_field->name;

// 遍历字段

while (!! $_field =$_reslut ->fetch_field()) {

echo$_field ->name. '
' ;

}

// 一次性取得字段数组

print_r( $_reslut->fetch_fields());

// 移动数据指针

$_reslut->data_seek( 5 );

// 移动字段指针

$_reslut->field_seek( 2 );

5. 执行多条 SQL 语句

有的时候 ,我们需要在一张页面上同时执行多条 SQL 语句 , 之前的方法就是分别创建多

个结果集然后使用。但这样资源消耗很大,也不利于管理。PHP 提供了执行多条 SQL 语句

的方法 $_mysqli->multi_query() ;

// 创建多条 SQL 语句

$_sql .="SELECT * FROM tg_user;" ;

$_sql .="SELECT * FROM tg_photo;" ;

$_sql .="SELECT * FROM tg_article" ;

// 开始执行多条 SQL 语句

if ( $_mysqli->multi_query( $_sql )) {

//开始获取第一条 SQL 语句的结果集

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

//将结果集指针移到下一个

$_mysqli->next_result();

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

$_mysqli->next_result();

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

} else {

echo'sql 语句有误! ' ;

}

6. 执行数据库事务

事务 (transaction)是作为整个一个单元的一组有序的数据库操作 。 如果一组中的所有操

作都成功 , 则认为事务成功 ,即使只有一个失败操作 , 事务也不成功 。 如果所有操作成功完

成 , 事务则提交 (commit) ,其修改将作用于所有其他数据库进程 。 如果一个操作失败 , 则事

务将回滚 (roll back),该事务所有操作的影响都将取消。

首先 , 您的 MySQL 是InnoDB 或 BDB 引擎的一种 , 一般来说 , 你安装了 AppServ 的集成

包 , 你选择 InnoDB的引擎的数据库即可 。 如果你建立的表不是 InnoDB , 可以在 phpmyadmin

里修改。

// 首先你必须关闭自动提交数据

$_mysqli->autocommit( false );

// 创建一个 SQL 语句,必须同时运行成功,不能出现一个成功,一个失败

$_sql .="UPDATE tg_friend SET tg_state=tg_state+5 WHERE tg_id=1;" ;

$_sql .="UPDATE tg_flower SET tg_flower=tg_flower-5 WHERE tg_id=1;" ;

// 执行两条 SQL 语句

if ( $_mysqli->multi_query( $_sql )) {

//获取第一条 SQL 一影响的行数

$_success= $_mysqli ->affected_rows == 1 ? true : false ;

//下移,第二条 SQL

$_mysqli->next_result();

//获取第二条 SQL 影响的行数

$_success2 = $_mysqli ->affected_rows == 1 ? true : false ;

//判断是否都正常通过了,两个 SQL

if( $_success && $_success2 ) {

$_mysqli->commit();

echo' 完美提交! ' ;

}else {

$_mysqli->rollback();

echo' 程序出现异常! ' ;

}

}

} else {

echo"SQL 语句有误: " . $_mysqli ->errno. $_mysqli ->error;

}

// 最后还必须开启自动提交

$_mysqli->autocommit( true );

php 通过mysqli 操作数据库mysql

目录 php mysqli 操作数据库 连接数据库 通过mysqli 创建数据库 通过mysqi 创建数据表 通过mysqli向数据表中插入信息 通过mysqli 读取数据 where语句的应用 通过 ...

在PHP中使用MySQL Mysqli操作数据库 ,以及类操作方法

先来操作函数部分,普遍的MySQL 函数方法,但随着PHP5的发展,有些函数使用的要求加重了,有些则将废弃不用,有些则参数必填... ================================= ...

比Mysqli操作数据库更简便的方式 。PDO

下面来说一下PDO 先画一张图来了解一下 mysqli是针对mysql这个数据库扩展的一个类 PDO是为了能访问更多数据库 如果出现程序需要访问其他数据库的话就可以用PDO来做 PDO数据访问抽象层1 ...

mysqli操作数据库

1 连接数据库:可以使用对象或函数来连接(我们这里主要用mysqli对象,附带着函数连接) //创建mysqli对象(也可以叫做资源句柄) $_mysqli = new mysqli(); //连接数 ...

mysqli 操作数据库(转)

从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/ ...

mysqli 操作数据库

从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/ ...

VC中使用ADO操作数据库的方法 SQL2000

(1).引入ADO类 #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace \ ...

VC中使用ADO操作数据库的方法

源地址:http://blog.csdn.net/xiaobai1593/article/details/7459862 准备工作: (1).引入ADO类 #import "c:\progr ...

MFC中使用sqlite3操作数据库

需要用到的文件有sqlite3.h .sqlite3.dll.sqlite3.lib.网上很多人分享下载地址这里不再赘述. 将这三个文件拷贝到自己新建MFC项目目录下,在解决方案窗口下 添加现有项,选 ...

随机推荐

【图像处理】【SEED-VPM】7.ubuntu10.04下 TFTP,NFS 安装指南

Linux系统启动流程 程序开发调试的一般方法 1. TFTP下载内核+NFS网络文件系统.即内核和文件系统均不在板卡上.主要用于调试内核功能. 2. FLASH启动内核+NFS网络文件系统,即内核固 ...

不简单的SQL查询和排序语句

真不简单!! 一:使用select语句进行查询 语法: SELECT     FROM       [WHERE    ] [OR ...

API23时权限不被许可

In Android 6.0 Marshmallow, application will not be granted any permission at installation time. Ins ...

windows 通过ssh连接到Linux主机

1. 确定Linux主机已经开启了ssh功能. 1.1--确认sshserver是否启动 ps -e |grep ssh 如果只有ssh-agent那ssh-server还没有启动,需要/etc/in ...

防止 SQL 注入的方法(摘抄)

——选自

J2EE学习中一些值得研究的开源项(转)

这篇文章写在我研究J2SE.J2EE近三年后.前3年我研究了J2SE的Swing.Applet.Net.RMI.Collections. IO.JNI……研究了J2EE的JDBC.Sevlet.JSP ...

Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具

Cacti 是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. mysqlreport是mysql性能监测时最常用的工具,对了解mysql运行状态和配置调整都有很大 ...

lcd_1602

module lcd_pdf( clk,lcd_data, lcd_rw,lcd_rs, lcd_en,rst_n ); input clk; input rst_n; output reg [:] ...

《Java从入门到放弃》JavaSE篇:程序结构

程序的结构一般分为三种: 顺序结构. 选择结构. 循环结构. 一.顺序结构:这个不用多说吧,跟我们平时写文章的顺序一样,从上往下. 二.选择结构:从名字就能看出,要选择嘛,到底是要漂亮滴妹子,还是要有 ...

c#数据库事务锁类型

一.脏读.不可重复读.幻象读的区别   1.脏读:包含未提交数据的读取.例如,事务 a 更改了某行(数据库已发生更改,但尚未提交,有可能发生回滚),事务 b 在事务 a 提交更改之前读取已更改的行.如 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值