PHP连接MySQL数据库三种实现方法


Posted in PHP onDecember 10, 2020

引言

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与Mysql扩展(本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除),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);

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();
?>

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

<?php
$mysql_conf = array(
  'host'  => '127.0.0.1:3306', 
  'db'   => 'test', 
  'db_user' => 'root', 
  'db_pwd' => 'joshua317', 
  );
try {
  $pdo = new PDO("mysql:host=" . $mysql_conf['host'] . ";dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//创建一个pdo对象
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 设置sql语句查询如果出现问题 就会抛出异常
  //set_exception_handler("cus_exception_handler");
} catch (PDOException $e) {
  die("connect error:".$e->getMessage());
}
$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);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP Zip解压 文件在线解压缩的函数代码
May 26 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
php 注释规范
Mar 29 PHP
浅析php中jsonp的跨域实例
Jun 21 PHP
PHP eval函数使用介绍
Dec 08 PHP
PHP中使用imagick生成PSD文件缩略图教程
Jan 26 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
Yii2中添加全局函数的方法分析
May 04 PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
May 20 PHP
php异常处理捕获错误整理
Sep 23 PHP
swoole锁的机制代码实例讲解
Mar 04 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 #PHP
用php实现分页效果的示例代码
Dec 10 #PHP
PHP笛卡尔积实现原理及代码实例
Dec 09 #PHP
PHP基于进程控制函数实现多线程
Dec 09 #PHP
PHP如何防止用户重复提交表单
Dec 09 #PHP
Nginx+php配置文件及原理解析
Dec 09 #PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 #PHP
You might like
php 远程关机操作的代码
2008/12/05 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
JS 分号引起的一段调试问题
2009/06/18 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
跟老齐学Python之编写类之二方法
2014/10/11 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
python tkinter控件布局项目实例
2019/11/04 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
2020/02/26 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
接口可以包含哪些成员
2012/09/30 面试题
制药工程专业毕业生推荐信
2013/12/24 职场文书
大学生活自我评价
2014/04/09 职场文书
移风易俗倡议书
2014/04/15 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
七夕相亲活动策划方案
2014/08/31 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
诚实守信主题班会
2015/08/13 职场文书
Django显示可视化图表的实践
2021/05/10 Python
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers