当前位置: 首页 > 后端技术 > PHP

PHP中的MySQLi扩展学习(一)MySQLi简介

时间:2023-03-29 21:08:54 PHP

关于PDO的学习到这里就告一段落了。从本文开始,我们继续学习另一个MySQLi扩展,它是PDO之外的核心MySQLi扩展。MySQL(原始)扩展可以说是它的祖先,是我们许多人在刚开始学习PHP时连接到数据库的首选指南。然而,随着时代的变化,MySQL(原始)扩展已在PHP7中完全弃用。现在如果要使用过程化代码操作数据库,只能使用mysqli扩展。当然mysqli扩展也支持面向对象的写法。什么是MySQLiMySQLi扩展允许我们访问MySQL4.1及以上数据库提供的功能。它是专门针对MySQL数据库的,不像PDO可以通过不同的dns连接到不同的数据库。MySQL与PDO的区别与联系首先,让我们回顾一下最早的MySQL扩展。它只是面向过程的,不支持存储过程、多语句执行和准备语句。PHP7已经删除,完全不支持PDO。仅支持面向对象模式,可用于连接多个数据库,切换数据库带来的变化小,甚至可能不需要修改代码即可支持存储过程、多语句执行、准备声明。最后,MySQLi。支持面向对象和面向过程的编写。只有MySQL数据库支持存储过程、多语句执行和准备语句。关注PHP和MySQL的版本更新,可以更快的支持更高级的MySQL特性。从这三个特性来看,MySQL(原版)扩展是绝对不推荐的。即使是老项目,只要PHP版本支持PDO或MySQLi,就应该考虑将数据库连接转换为这两种方式中的一种。如果你还在PHP5环境下学习MySQL(原版)扩展的使用,也可以放过。至于选择PDO和MySQLi,见仁见智。其实它们之间并没有太大区别,只是在现代的大型框架中,PDO基本被封装为默认的数据库连接。毕竟它的可移植性可以方便这些通用的框架去连接不同的数据库。在一些小的框架或项目中,仍然可以看到MySQLi的身影。当然,小众并不代表不好,就像在日常开发中,我们很少会在PHP环境下使用其他数据库,所以在自己的小项目中使用一套MySQLi来操作数据库会更加方便快捷。同时,如果老项目要切换到PHP7版本,如果之前使用的是MySQL(原版)连接数据库,可以通过MySQLi快速方便的替换MySQL(原版)代码。MySQL8扩展的安装及注意事项MySQLi扩展是随PHP源码一起发布的,我们可以在编译PHP的时候加上--with-mysqli。现在默认的数据库驱动是mysqlnd,libmysql基本被淘汰了。所以编译时不需要添加其他参数,直接编译即可。连接MySQL8时要注意,因为MySQL8服务器默认会使用caching_sha2_password作为密码加密。但是PHP7.2.4之前版本的MySQLi会使用mysql_native_password对连接密码进行加密,导致无法连接数据库。可以修改my.cnf文件,设置default_authentication_plugin=mysql_native_password,让MySQL8也使用mysql_native_password加密用户密码。面向过程上面提到,MySQLi支持两种写法,即面向对象和面向过程。简单理解,一种是MySQL(原版)扩展的写法,另一种是类似于PDO的写法。我们先来看看面向过程的写法。$mysqli=mysqli_connect("localhost","root","","blog_test");$res=mysqli_query($mysqli,"SELECT*FROMzyblog_test_user");$row=mysqli_fetch_assoc($res);print_r($row);是不是觉得移植MySQL的扩展代码真的很方便(原创)。只需将所有方法名称更改为mysqli_xxx即可。面向对象面向对象有点像PDO。我们需要先获取一个连接句柄类,然后对这个类进行操作。$mysqli=newmysqli("localhost","root","","blog_test");$res=$mysqli->query("SELECT*FROMzyblog_test_user");$row=$res->fetch_assoc();打印_r($行);混合面向对象和面向过程此外,这两种方法也可以混合使用,但不推荐。将它们混合在一起很容易使查看代码的人感到困惑。因此,最好在一个项目中坚持使用一种方法。$mysqli=newmysqli("localhost","root","","blog_test");$res=mysqli_query($mysqli,"SELECT*FROMzyblog_test_user");$row=$res->fetch_assoc();print_r($行);在这段代码中,我们实例化了一个mysqli对象,然后使用面向过程的mysqli_query()函数执行语句,再使用面向对象的方法获取结果集。乱吗?但它工作正常。小结从以上内容可以看出,PDO的特点是支持多种不同类型的数据库,就像Java中的JDBC一样。MySQLi虽然只支持MySQL数据库,但是可以同时支持面向对象和面向过程的写法。是我们升级优化老项目代码的好帮手。同时,它仍然是PHP入门学习相关数据库操作的首选。下一篇我们默认只使用面向对象的写法继续学习MySQLi扩展。测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/4。PHP中MySQLi扩展学习(一)MySQLi.php介绍参考文档:https://www.php.net/manual/zh/mysqli.requirements.phphttps://www.php.net/manual/zh/mysqli。installation.phphttps://www.php.net/manual/zh/mysqli.overview.phphttps://www.php.net/manual/zh/mysqli.quickstart.dual-interface.php各媒体平台可搜索【硬核项目经理】

最新推荐
猜你喜欢