PHP使用mysqli操作MySQL数据库的简单方法


Posted in PHP onFebruary 04, 2017

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. ' <br /> ' ;

}

使用索引数组和关联数组

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

$_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. '<br />' ;

}

// 一次性取得字段数组

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 相关文章推荐
2.PHP入门
Oct 09 PHP
PHP关联链接常用代码
Nov 05 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
Oct 13 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
php实现的二分查找算法示例
Jun 20 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
php微信扫码支付 php公众号支付
Mar 24 PHP
通过PHP实现获取访问用户IP
May 09 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
Feb 04 #PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 #PHP
关于PHP内置的字符串处理函数详解
Feb 04 #PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 #PHP
浅谈PHP中的错误处理和异常处理
Feb 04 #PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 #PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 #PHP
You might like
基于Zend的Captcha机制的应用
2013/05/02 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
一个小型js框架myJSFrame附API使用帮助
2008/06/28 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
Python中print和return的作用及区别解析
2019/05/05 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
python 解决tqdm模块不能单行显示的问题
2020/02/19 Python
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
群众路线教育实践活动心得体会
2014/03/07 职场文书
主持人演讲稿
2014/05/13 职场文书
法律专业自荐信
2014/06/03 职场文书
拉拉队口号
2014/06/16 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
单位考核鉴定意见
2015/06/05 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
nginx配置虚拟主机的详细步骤
2021/07/21 Servers