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

PHPMysqLi 扩展提供了其先行版本的所有功能,此外,由于 MysqL 已经是一个具有完整特性的数据库服务器 , 这为PHP添加了一些新特性 。 而 MysqLi 恰恰也支持了这些新特性。

一. 建立和断开连接

MysqL数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并选择一个数据库 , 以及最后关闭连接 。与 MysqLi 几乎所有的特性一样 , 这一点可以使用面向对象的方法来完成,也可以采用过程化的方式完成。

1. 创建一个 MysqLi 的对象

$_MysqLi = newMysqLi();

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

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

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

$_MysqLi = newMysqLi( 'localhost','guest' );

4. 单独选择数据库

$_MysqLi->select_db( 'testguest' );

5. 断开 MysqL

$_MysqLi->close();

二. 处理连接错误

如果无法连接 MysqL数据库,那么这个页面不太可能继续完成预期的工作。因此,一定要注意监视连接错误并相应地做出反应 。MysqLi 扩展包含有很多特性可以用来捕获错误信息,例如:MysqLi_connect_errno() 和 MysqLi_connect_error() 方法

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

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

rush:PHP;"> if(MysqLi_connect_errno()) {

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

exit();

}

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

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

errno) {

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

}

三. 与数据库进行交互

绝大多数查询都与创建(Creation) 、获取 (Retrieval) 、更新 (Update) 和删除 (Deletion) 任务有关,这些任务统称为 CRUD 。

1. 获取数据

网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出

$_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 .="SELECT * FROM tg_user;" ;

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

$_sql .="SELECT * FROM tg_article" ;

// 开始执行多条 SQL 语句

if ( $_mysqli->multiquery( $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->multiquery( $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数据库的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?
C++程序:将一个数组的所有元素复制到另一个数组中
Golang:构建智能系统的基石
为什么AI开发者应该关注Golang?
在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
PHP8底层开发原理解析及新特性应用实例
利用PHP8底层开发原理解析新特性:如何构建出色的Web应用