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自动给文章加关键词链接的函数代码
Nov 29 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
Php header()函数语法及使用代码
Nov 04 PHP
浅谈PHP中output_buffering
Jul 13 PHP
php实现通过cookie换肤的方法
Jul 13 PHP
PHP使用array_merge重新排列数组下标的方法
Jul 22 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
May 20 PHP
PHP基于Redis消息队列实现发布微博的方法
May 03 PHP
php调用云片网接口发送短信的实现方法
Oct 25 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 PHP
使用laravel根据用户类型来显示或隐藏字段
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垃圾回收机制简单说明
2010/07/22 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
javascript显示选择目录对话框的代码
2008/11/10 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
每日十条JavaScript经验技巧(二)
2016/06/23 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
Python实现网站表单提交和模板
2019/01/15 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
大学生标准推荐信范文
2013/11/25 职场文书
销售提升方案
2014/06/07 职场文书
公司聚餐通知
2015/04/22 职场文书
不同意离婚答辩状
2015/05/22 职场文书
春节晚会开场白
2015/05/29 职场文书
公司宣传语大全
2015/07/13 职场文书
战友聚会致辞
2015/07/28 职场文书
女性励志书籍推荐
2019/08/19 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
使用javascript解析二维码的三种方式
2021/11/11 Javascript
python高温预警数据获取实例
2022/07/23 Python