Mysqli扩展如何实现MySQL数据库交互,过程是什么
Admin 2022-08-18 群英技术资讯 1021 次浏览
很多朋友都对“Mysqli扩展如何实现MySQL数据库交互,过程是什么”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧!
前面给大家简单介绍了如何在本地安装 MySQL 以及通过命令行和 GUI 客户端软件与 MySQL 服务器进行交互。
在命令行可以通过命令与 MySQL 交互,在客户端软件可以通过图形化界面与 MySQL 交互,那么在 PHP 程序中如何建立与 MySQL 的连接和交互呢?实际上,我们完全可以把 PHP 应用看作是 MySQL 服务器的客户端,然后通过封装好的 PHP 扩展包提供的 API 与 MySQL 服务器进行交互,就好像我们在命令行和客户端软件中所做的一样,只不过现在这种交互由手动操作转变成了通过编写对应的 PHP 代码来完成。
PHP 官方提供了很多用于与 MySQL 服务器进行交互的扩展,从最早的 mysql 到后来增强版的 mysqli(更加安全),它们都是 PHP 函数式编程时代的扩展包,一般来说,本地 PHP 集成开发环境都会自带 mysqli 扩展:

下面我们通过一个简单的示例来演示如何通过 mysqli 扩展与 MySQL 服务器交互。
示例代码
在 php_learning 目录下新增一个 mysql 子目录,然后在该子目录下新建一个 mysqli.php 文件,编写一段通过 mysqli 扩展 API 建立数据库连接和查询的代码:
<?php $host = '127.0.0.1'; // MySQL 服务器主机地址 $port = 3306; // MySQL 服务器进程端口号 $user = 'root'; // 用户名 $password = 'root'; // 密码 $dbname = 'test'; // 使用的数据库名称 // 通过 mysqli 扩展建立与 mysql 服务器的连接 $conn = mysqli_connect($host, $user, $password, $dbname, $port); // 在连接实例上进行查询 $sql = 'SELECT * FROM `post`'; $res = mysqli_query($conn, $sql); // 获取所有结果 $rows = mysqli_fetch_all($res); var_dump($rows); // 释放资源 mysqli_free_result($res); // 关闭连接 mysqli_close($conn);
可以看到,通过 mysqli_connect 函数即可建立与 MySQL 数据库的连接,我们传入了5个参数,依次是数据库主机、用户名、密码、数据库名称和端口号,建立连接成功后,就可以持有这个连接实例通过 mysqli_query 函数执行数据库查询了,我们将 SQL 语句作为第二个参数传入,该函数的返回结果是一个查询结果集实例,拿到这个实例之后,就可以通过 mysqli_fetch_* 系列函数获取结果数据了。
这里我们通过 mysqli_fetch_all 函数获取所有查询结果,通过 php -S localhost:9000 启动 PHP 内置 HTTP 服务器:

就可以在浏览器中通过 http://localhost:9000/mysql/mysqli.php 打印的查询结果了:

优化渲染效果
这个时候页面样式可读性很差,可以在源码中打印输出结果之前,插入一段 echo '<pre>' 代码优化渲染效果:
// 获取所有结果 $rows = mysqli_fetch_all($res); echo '<pre>'; var_dump($rows);
刷新浏览器页面,就可以看到如下打印效果:

相关学习推荐:mysql教程(视频)
设置字符编码
这里有个小问题,那就是 Emoji 表情符号没有正常显示出来,乱码了,我们可以像在命令行中设置默认字符编码一样,通过 mysqli_set_charset 函数设置字符编码为 utf8mb4:
// 通过 mysqli 扩展建立与 mysql 服务器的连接 $conn = mysqli_connect($host, $user, $password, $dbname, $port); // 设置字符编码为 utf8mb4 mysqli_set_charset($conn, 'utf8mb4'); ... // 获取所有结果 $rows = mysqli_fetch_all($res); echo '<pre>'; var_dump($rows[2]);
刷新页面就可以看到 Emoji 表情了:

返回关联数组
目前返回的结果是索引数组,无法得知数值对应的字段名,要获取完整的字段名与字段值映射,可以将传入 mysqli_fetch_all 函数的第二个参数值设置为 MYSQLI_ASSOC 来实现(默认是 MYSQLI_NUM):
// 获取所有结果(关联数组) $rows = mysqli_fetch_all($res, MYSQLI_ASSOC); echo '<pre>'; var_dump($rows[2]);

返回单条结果
上面返回的都是多条结果(即使只返回一条记录,返回的也是多维数组),有时候,我们只想返回结果集中的第一条结果,这时候可以通过 mysqli_fetch_row 函数来实现:
// 在连接实例上进行查询 $sql = 'SELECT * FROM `post` WHERE id = 1'; $res = mysqli_query($conn, $sql); // 获取所有结果 /* $rows = mysqli_fetch_all($res, MYSQLI_ASSOC); echo '<pre>'; var_dump($rows);*/ // 获取单条结果 $row = mysqli_fetch_row($res); echo '<pre>'; var_dump($row);
刷新浏览器测试页面,打印结果如下:

可以看到返回结果已经是一个一维数组了,只包含一条记录。如果想要返回关联数组结果,需要通过一个新的函数 mysqli_fetch_assoc 函数来实现:
// 获取单条结果 // $row = mysqli_fetch_row($res); $row = mysqli_fetch_assoc($res); echo '<pre>'; var_dump($row);
对应的打印结果如下:

将返回结果映射到指定对象
除了返回数组格式结果外,还可以借助 mysqli_fetch_object 函数将数据库查询结果映射到指定对象实例并返回:
class Post
{
public $id;
public $title;
public $content;
public $created_at;
public function __toString()
{
return '[#' . $this->id . ']' . $this->title;
}
}
// 将数据库返回结果映射到指定个对象
$post = mysqli_fetch_object($res, Post::class);
echo $post;对应的打印结果如下,说明对象映射成功(调用了对象的魔术方法 __toString 打印输出该对象):

在上述数据库查询操作中,我们直接将原生 SQL 语句传递给 MySQL 数据库执行,如果 SQL 语句中包含了用户传递的参数,则存在 SQL 注入风险,要避免 SQL 注入攻击,在 mysqli 扩展中,可以通过构建预处理语句的方式实现:
下面,我们以插入记录到数据库为例,演示如何通过预处理语句的方式与数据库交互,提高代码安全性。
我们首先基于预处理语句编写插入记录到数据库的代码如下(基于上面的 $conn 连接实例):
// 插入记录到数据库 $sql = 'INSERT INTO `post` (title, content, created_at) VALUES (?, ?, ?)'; // 构建预处理 SQL 语句 $stmt = mysqli_prepare($conn, $sql); // 绑定参数值 $title = '这是一篇测试文章'; $content = '测试文章啊啊啊
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在前面我们了解了应该怎样去绘制图形验证码,那接下来我们一起看一看,在PHP中想要实现图像的缩放和裁剪应该怎样操作。不过在了解图像的缩放和裁剪之前我们先来认识一下下面这两个函数:
laravel排序失效的解决办法:1、通过“$query->whereIn(...)”查询数据;2、通过filter过滤数据;3、设置排序好的数据为“$data = $scoutModelsLists;”。
PHP中的异常处理机制是比较难理解的一个知识点,很多朋友在学习过程中,对于异常处理有些不明白。为了帮助大家更好的学习和理解PHP中的异常处理机制,文本会详细介绍异常处理机制,有这方面学习需求的朋友可以看一下。
php-fpm解读-进程管理的三种模式—程序媛大丽标明转载以示尊重感谢原作者的分享。php-fpm进程管理一共有三种模式:ondemand、static、dynamic,我们可以在同一个fpm的master配置三种模式,看下图1。php-fpm的工作模式和nginx类似,都是一个master,多个worker模型。每个worker都在accept本pool内的监听套接字(linux已不存
本节介绍了 PHP 中需要使用到的 String 函数,我们对这些函数进行了相关的描述!PHP String 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008