PHP使用mysqli操作MySQL数据库
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数据库的更多相关文章
- mysqli扩展库操作mysql数据库
配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 <?p ...
- 使用php的mysqli扩展库操作mysql数据库
简单介绍mysqli: 1.mysqli(mysql improve mysql扩展库的增强版) mysql扩展库和mysqli扩展库的区别 1.mysqli的稳定性 安全性 和 执行效率有所提高 ...
- php笔记08:数据库编程---使用php的MySQL扩展库操作MySQL数据库
1.使用php的MySQL扩展库操作MySQL数据库: php有3种方式操作MySQL数据库 (1)mysql扩展库 (2)mysqli扩展库 (3)pdo mysql扩展库与mysql数据库 ...
- PHP操作MySQL数据库之天龙八部 -- 七贱下天山 -- 六脉神剑
天龙八部 八步操作数据库 七贱下天山 七步操作数据库 (将判断错误省略) 六脉神剑 六步操作数据库(将判断错误省略,将选择数据库添加到第一步 ...
- PHP操作MySQL数据库5个步骤
PHP操作MySQL数据库一般可分为5个步骤:1.连接MySQL数据库服务器:2.选择数据库:3.执行SQL语句:4.关闭结果集:5断开与MySQL数据库服务器连接. 1.用mysql_connect ...
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- 转 用C API 操作MySQL数据库
用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...
- PHP操作mysql数据库:[2]查询数据听语音
本文主要详细讲解如何使用php语言,对mysql数据库进行查询.添加.删除.更新等操作. 工具/原料 Macromedia Dreamweaver 8 mysql数据库,php语言 一.前言 ...
- Code First操作Mysql数据库
前面博客也讲了,自己做一个网站,选用的是MVC+EF Code First+MySql+EasyUI,先说下技术选型.一.为什么选择MVC? 因为之前自己做的系统大部分是webForm,MVC的之前也 ...
随机推荐
- HTML5自学笔记[ 7 ]defer和async
defer:给位于最前面的script标签设置defer="defer",外联js就会在onload触发之前才加载. async:给script标签设置async="as ...
- (29)odoo的可用小图标
* 系统的小图标都采用了 fontawesome 官网是 http://fontawesome.dashgame.com/ * 运用小图标 # 首先打开官网 http://fonta ...
- (14)odoo加载机制
Odoo的启动通过openerp-server脚本完成,它是系统的入口. 然后加载配置文件openerp-server.conf 或者 .openerp_serverrc: openerp-serve ...
- 189. Rotate Array -- 将数组前一半移到后一半
Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...
- SpringMVC整合Quartz实现定时任务以及Tomcat服务执行初始化定时任务
1.导入quartz.jar包,或者pom.xml 配置对应的依赖: <dependency> <groupId>org.quartz-scheduler</groupI ...
- java配置数据库连接池的方法步骤
java配置数据库连接池的方法步骤 java配置数据库连接池的方法步骤,需要的朋友可以参考一下 先来了解下什么是数据库连接池数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vecto ...
- 为什么html5用的jQuery Mobile在手机浏览器/微信中打开字体很小
头部加入 <header> <metaname="viewport"content="width=device-width, initial-scale ...
- GBK编码相关
如上图.的GBK编码是A3AE, 那么·对应的无符号整数值应该是A*16**3+E*16**2+A+3, 无符号整数值所在地址的第一个自己是A3,第二个字节是AE
- 工程技巧Linux上建立工程项目
程序中用到的核心代码用库的形式进行封装,并且给出示例程序,下面给出一个程序文件夹的建立脚本. 如运行sh MakeProject.sh PersonNameIdentification PNILib ...
- win7_64bit下桌面及开始菜单中图标变为.lnk
以下内容参考整理与MSDN: 1.首先 win+r 2.打开运行程序 3.输入: regedit 4.找到: 计算机\HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WIND ...