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完整的日历类(CLASS)
Nov 27 PHP
php 8小时时间差的解决方法小结
Dec 22 PHP
php 生成随机验证码图片代码
Feb 08 PHP
Linux下实现PHP多进程的方法分享
Aug 16 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
浅析php数据类型转换
Jan 09 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
PHP入门教程之数学运算技巧总结
Sep 11 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 20 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
zend framework配置操作数据库实例分析
2012/12/06 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
JS代码放在head和body中的区别分析
2011/12/01 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
详解vue axios二次封装
2018/07/22 Javascript
轻松实现python搭建微信公众平台
2016/02/16 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
Python线程指南分享
2019/11/19 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
python中wheel的用法整理
2020/06/15 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
PHP经典面试题
2016/09/03 面试题
2014年端午节活动方案
2014/03/11 职场文书
药学职务聘任书
2014/03/29 职场文书
会计师事务所实习证明
2014/11/16 职场文书
刑事附带民事起诉状
2015/05/19 职场文书