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 相关文章推荐
Discuz 模板语句分析及知识技巧
Aug 21 PHP
frename PHP 灵活文件命名函数 frename
Sep 09 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
php字符串截取函数用法分析
Nov 25 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
Nov 05 PHP
php实现的中文分词类完整实例
Feb 06 PHP
深入理解PHP中mt_rand()随机数的安全
Oct 12 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 15 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
JS获取html对象的几种方式介绍
2013/12/05 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
ExpressJS入门实例
2015/01/14 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
python实用代码片段收集贴
2015/06/03 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
python连接数据库的方法
2017/10/19 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python中time库的实例使用方法
2019/10/31 Python
python实现人机五子棋
2020/03/25 Python
行政部工作岗位职责范本
2014/03/05 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
python程序的组织结构详解
2021/12/06 Python