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 strlen mb_strlen计算中英文混排字符串长度
Jul 10 PHP
解析PHP中一些可能会被忽略的问题
Jun 21 PHP
百度ping方法使用示例 自动ping百度
Jan 26 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 PHP
PHP打印输出函数汇总
Aug 28 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
php使用yield对性能提升的测试实例分析
Sep 19 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
php 错误处理经验分享
2011/10/11 PHP
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
Python搜索引擎实现原理和方法
2017/11/27 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
python中Django文件上传方法详解
2020/08/05 Python
瑞典度假品牌:OAS
2019/05/28 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
高职助产应届生自荐信
2013/09/24 职场文书
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
2014年党支部学习材料
2014/05/19 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
统计工作个人总结
2015/03/03 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
python数字图像处理实现图像的形变与缩放
2022/06/28 Python