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 相关文章推荐
模拟OICQ的实现思路和核心程序(一)
Oct 09 PHP
php中数组首字符过滤功能代码
Jul 31 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
php实现的css文件背景图片下载器代码
Nov 11 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
PHP精确计算功能示例
Nov 29 PHP
Yii CFileCache 获取不到值的原因分析
Feb 08 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 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
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
PHP计数器的实现代码
2013/06/08 PHP
php中利用explode函数分割字符串到数组
2014/02/08 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
Symfony查询方法实例小结
2017/06/28 PHP
php post换行的方法
2020/02/03 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
jQuery AJAX回调函数this指向问题
2010/02/08 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
关于query Javascript CSS Selector engine
2013/04/12 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
jQuery功能函数详解
2015/02/01 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
PHPStorm中如何对nodejs项目进行单元测试详解
2019/02/28 NodeJs
webpack常用配置总览(小结)
2019/11/18 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
python关于倒排列的知识点总结
2020/10/13 Python
基于Python实现粒子滤波效果
2020/12/01 Python
素食餐饮项目创业计划书
2014/02/02 职场文书
开工仪式主持词
2014/03/20 职场文书
安全生产宣传标语
2014/06/06 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
python如何查找列表中元素的位置
2022/05/30 Python
Redis唯一ID生成器的实现
2022/07/07 Redis