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 相关文章推荐
初探PHP5
Oct 09 PHP
PHP脚本的10个技巧(2)
Oct 09 PHP
discuz安全提问算法
Jun 06 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
Dec 05 PHP
PHP加密函数 Javascript/Js 解密函数
Sep 23 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
php文件上传类完整实例
May 14 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
Sep 22 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
mac pecl 安装php7.1扩展教程
Oct 17 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/07/19 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
使javascript也能包含文件
2006/10/26 Javascript
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
JS+CSS实现简易实用的滑动门菜单效果
2015/09/18 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
python实现飞机大战微信小游戏
2020/03/21 Python
python获取本机所有IP地址的方法
2018/12/26 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
执行Python程序时模块报错问题
2020/03/26 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
Python容器类型公共方法总结
2020/08/19 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
大专毕业生自我鉴定
2013/11/21 职场文书
金融专业毕业生推荐信
2013/11/26 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
超市主管竞聘书
2015/09/15 职场文书
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
vue 给数组添加新对象并赋值
2022/04/20 Vue.js