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 执行系统命令的方法
Jul 07 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
PHP内存使用情况如何获取
Oct 10 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
thinkphp跨库操作的简单代码实例
Sep 22 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
PHP+ajax实现获取新闻数据简单示例
May 08 PHP
PHP中str_split()函数的用法讲解
Apr 11 PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php自动加载的两种实现方法
2010/06/21 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
js不是基础的基础
2006/12/24 Javascript
javascript比较文档位置
2008/04/08 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
简单了解Python中的几种函数
2017/11/03 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
IRO美国官网:法国服装品牌
2018/03/06 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
员工晚婚的请假条
2014/02/08 职场文书
初中学生期末评语
2014/04/24 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
工程承诺书怎么写
2014/05/24 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
羊脂球读书笔记
2015/06/30 职场文书
68句权威创业名言
2019/08/26 职场文书