PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】


Posted in PHP onNovember 04, 2019

本文实例讲述了PHP连接MySQL数据库的三种方式。分享给大家供大家参考,具体如下:

PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案。

PHP的MySQL扩展是设计开发允许php应用与MySQL数据库交互的早期扩展。MySQL扩展提供了一个面向过程的接口,并且是针对MySQL4.1.3或者更早版本设计的。因此这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端进行交互,但并不支持后期MySQL服务端提供的一些特性。由于太古老,又不安全,所以已被后来的mysqli完全取代;

PHP的mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。其特点为:面向对象接口 、prepared语句支持、多语句执行支持、事务支持 、增强的调试能力、嵌入式服务支持 、预处理方式完全解决了sql注入的问题。不过其也有缺点,就是只支持mysql数据库。如果你要是不操作其他的数据库,这无疑是最好的选择。

PDO是PHP Data Objects的缩写,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要连接的数据库服务器系统类型,也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从Oracle 到MySQL,仅仅需要修改很少的PHP代码。其功能类似于JDBC、ODBC、DBI之类接口。同样,其也解决了sql注入问题,有很好的安全性。不过他也有缺点,某些多语句执行查询不支持(不过该情况很少)。

官文对于三者之间也做了列表性的比较:

  PHP的mysqli扩展 PDO PHP的mysql扩展
引入的PHP版本 5.0 5.0 3.0之前
PHP5.x是否包含
MySQL开发状态 活跃 在PHP5.3中活跃 仅维护
在MySQL新项目中的建议使用程度 建议 - 首选 建议 不建议
API的字符集支持
服务端prepare语句的支持情况
客户端prepare语句的支持情况
存储过程支持情况
多语句执行支持情况 大多数
是否支持所有MySQL4.1以上功能 大多数
 

从官方给出的这份结果上来看,优先推荐msqli,其次是PDO 。而“民间”给出的结果很多是倾向于使用PDO,因为其不担有跨库的优点,更有读写速度快的特点。

1.PHP与Mysql扩展(本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除),PHP原生的方式去连接数据库,是面向过程的

<?php
$mysql_conf = array(
  'host'  => '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("could not connect to the database:\n" . mysql_error());//诊断连接错误
}
mysql_query("set names 'utf8'");//编码转化
$select_db = mysql_select_db($mysql_conf['db']);
if (!$select_db) {
  die("could not connect to the db:\n" . mysql_error());
}
$sql = "select * from user;";
$res = mysql_query($sql);
if (!$res) {
  die("could get the res:\n" . mysql_error());
}
while ($row = mysql_fetch_assoc($res)) {
  print_r($row);
}
mysql_close($mysql_conn);
?>

2.PHP与Mysqli扩展,面向过程、对象

<?php
$mysql_conf = array(
  'host'  => '127.0.0.1:3306', 
  'db'   => 'test', 
  'db_user' => 'root', 
  'db_pwd' => 'joshua317', 
  );
$mysqli = @new mysqli($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if ($mysqli->connect_errno) {
  die("could not connect to the database:\n" . $mysqli->connect_error);//诊断连接错误
}
$mysqli->query("set names 'utf8';");//编码转化
$select_db = $mysqli->select_db($mysql_conf['db']);
if (!$select_db) {
  die("could not connect to the db:\n" . $mysqli->error);
}$sql = "select uid from user where name = 'joshua';";
$res = $mysqli->query($sql);
if (!$res) {
  die("sql error:\n" . $mysqli->error);
}
 while ($row = $res->fetch_assoc()) {
    var_dump($row);
  }
$res->free();
$mysqli->close();
?>

3.PHP与PDO扩展,面向过程、对象

<?php
$mysql_conf = array(
  'host'  => '127.0.0.1:3306', 
  'db'   => 'test', 
  'db_user' => 'root', 
  'db_pwd' => 'joshua317', 
  );
$pdo = new PDO("mysql:host=" . $mysql_conf['host'] . ";dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//创建一个pdo对象
$pdo->exec("set names 'utf8'");
$sql = "select * from user where name = ?";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(1, 'joshua', PDO::PARAM_STR);
$rs = $stmt->execute();
if ($rs) {
  // PDO::FETCH_ASSOC 关联数组形式
  // PDO::FETCH_NUM 数字索引数组形式
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    var_dump($row);
  }
}
$pdo = null;//关闭连接
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
基于PHP+MySQL的聊天室设计
Oct 09 PHP
将数字格式的计算结果转为汉字格式
Oct 09 PHP
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
优化PHP代码的53条建议
Mar 27 PHP
PHP初学者常见问题集合 修正版(21问答)
Mar 23 PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
PHP+Ajax无刷新带进度条图片上传示例
Feb 08 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
Laravel框架实现定时发布任务的方法
Aug 16 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
php框架知识点的整理和补充
Mar 01 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 #PHP
Laravel框架实现抢红包功能示例
Oct 31 #PHP
laravel框架实现后台登录、退出功能示例
Oct 31 #PHP
TP5框架简单登录功能实现方法示例
Oct 31 #PHP
Laravel框架实现即点即改功能的方法分析
Oct 31 #PHP
laravel 框架实现无限级分类的方法示例
Oct 31 #PHP
tp5框架的增删改查操作示例
Oct 31 #PHP
You might like
PHP 5.0 Pear安装方法
2006/12/06 PHP
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
php学习之运算符相关概念
2011/06/09 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
Javascript Select操作大集合
2009/05/26 Javascript
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
Jquery 扩展方法
2010/05/06 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
vue动画之点击按钮往上渐渐显示出来的实例
2018/09/29 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
python设置环境变量的作用整理
2020/02/17 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
怎样声明子类
2013/07/02 面试题
教师年终个人自我评价
2013/10/04 职场文书
30年同学聚会感言
2014/01/30 职场文书
班级入场式解说词
2014/02/01 职场文书
领导党性分析材料
2014/02/15 职场文书
民族学专业求职信
2014/07/28 职场文书
感谢信范文大全
2015/01/23 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
python_tkinter弹出对话框创建
2022/03/20 Python