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

PHP连接MySQL数据库的三种方式

时间:2023-03-29 18:40:25 PHP

本文介绍了PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo),并分析了PHP中基于mysql、mysqli、pdo三种方式的连接结合实例MySQL数据库的相关操作技巧和注意事项。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。PHP与MySQL的连接有3个API接口,分别是:PHP的MySQL扩展、PHP的mysqli扩展、PHP数据对象(PDO)。优秀的解决方案。PHP的MySQL扩展是早期设计和开发的扩展,允许PHP应用程序与MySQL数据库交互。MySQL扩展提供面向过程的接口,专为MySQL4.1.3或更早版本设计。因此,虽然这个扩展可以与MySQL4.1.3或更新的数据库服务器进行交互,但它不支持更高版本的MySQL服务器提供的一些特性。因为太老了,不安全,已经被后来的mysqli完全取代了;PHP的mysqli扩展,我们有时称之为MySQLEnhancedExtension,可以使用MySQL4.1.3或更高版本中新的高级特性。其特点是:面向对象的接口、准备语句支持、多语句执行支持、事务支持、增强的调试能力、嵌入式服务支持、预处理方法彻底解决了SQL注入问题。不过它也有缺点,就是只支持mysql数据库。如果不操作其他数据库,这无疑是最好的选择。PDO是PHPDataObjects的缩写,是PHP应用程序中的一种数据库抽象层规范。PDO提供了统一的API接口,让您的PHP应用程序无须关心要连接的数据库服务器系统的具体类型。也就是说,如果你使用PDO的API,你可以在任何需要的时候无缝切换数据库服务器,比如从Oracle到MySQL,只需要修改一点PHP代码。其功能类似于JDBC、ODBC、DBI等接口。同样也解决了sql注入问题,安全性好。不过他也有缺点,不支持一些多语句执行的查询(不过这种情况很少见)。官方文档也对三者进行了表格比较:PHP的mysqli扩展PDOPPHP在PHP5.05版本之前引入的mysql扩展。新MySQL项目维护建议建议-优先推荐不推荐API字符集支持是是否支持服务端prepare语句是是否支持客户端prepare语句否是否支持存储过程是是否多语句执行大多数支持是否定的。是否支持所有MySQL4.1以上的功能大部分是不支持。从官方给出的结果来看,首先推荐msqli,其次是PDO。但是“folk”给出的结果大多倾向于使用PDO,因为它不具备跨库的优势,而且具有读写速度快的特点。1.PHP和Mysql扩展(这个扩展从PHP5.5.0开始废弃,以后会去掉),PHP原生连接数据库的方式是面向进程的'127.0.0.1:3306','db'=>'test','db\_user'=>'root','db\_pwd'=>'root',);$mysql\_conn=@mysql\_connect($mysql\_conf\['host'\],$mysql\_conf\['db\_user'\],$mysql\_conf\['db\_pwd'\]);if(!$mysql\_conn){die("无法连接到数据库:\\n".mysql\_error());//诊断连接错误}mysql\_query("setnames'utf8'");//编码转换$select\_db=mysql\_select\_db($mysql\_conf\['db'\]);if(!$select\_db){die("无法连接到db:\\n".mysql\_error());}$sql="从用户中选择\*;";$res=mysql\_query($sql);if(!$res){die("可以获取res:\\n".mysql\_error());}while($row=mysql\_fetch\_assoc($res)){print\_r($row);}mysql\_close($mysql\_conn);?>2.PHP和Mysqli扩展,面向过程,对象'test','db\_user'=>'root','db\_pwd'=>'joshua317',);$mysqli=@newmysqli($mysql\_conf\['host'\],$mysql\_conf\['db\_user'\],$mysql\_conf\['db\_pwd'\]);if($mysqli->connect\_errno){die("无法连接到数据库:\\n".$mysqli->connect\_error);//诊断连接错误}$mysqli->query("setnames'utf8';");//编码转换$select\_db=$mysqli->select\_db($mysql\_conf\['db'\]);if(!$select\_db){die("无法连接到db:\\n".$mysqli->error);}$sql="selectuidfromuserwherename='joshua';";$res=$mysqli->query($sql);if(!$res){die("sqlerror:\\n".$mysqli->error);}while($row=$res->fetch\_assoc()){var\_dump($row);}$res->free();$mysqli->关闭();?>3、PHP与PDO扩展,面向进程、对象'127.0.0.1:3306','db'=>'test','db\_user'=>'root','db\_pwd'=>'joshua317',);$pdo=newPDO("mysql:host=".$mysql\_conf\['host'\].";dbname=".$mysql\_conf\['db'\],$mysql\_conf\['db\_user'\],$mysql\_conf\['db\_pwd'\]);//创建一个pdo对象$pdo->exec("setnames'utf8'");$sql="select\*fromuserwherename=";$stmt=$pdo->准备($sql);$stmt->bindValue(1,'joshua',PDO::PARAM\_STR);$rs=$stmt->执行();if($rs){//PDO::FETCH\_ASSOC关联数组格式//PDO::FETCH\_NUM数值索引数组形式while($row=$stmt->fetch(PDO::FETCH\_ASSOC)){var\_转储($行);}}$pdo=null;//关闭连接?>更多学习内容可以访问【与各大厂商对比】优质PHP架构师教程目录,只要能读懂保证涨薪更上一层楼(不断更新),以上内容希望对大家有所帮助,很多PHPer在前进的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道从哪里开始改进,我整理了一下这方面的一些资料,包括但不限于:分布式架构、高扩展性、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等知识点。你需要的高级进阶干货可以免费分享给大家。需要的可以点击链接获取高级PHP月薪30k>>>架构师成长路线【免费获取视频和面试资料】

最新推荐
猜你喜欢