php中数据库连接方式pdo和mysqli对比分析


Posted in PHP onFebruary 25, 2015

1)总的比较

  PDO MySQLi
数据库支持 12种不同的数据库支持 支持MySQL
API OOP OOP + 过程
Connection Easy Easy
命名参数 支持 不支持
对象映射支持 支持 支持
预处理语句  (客户端) 支持 不支持
性能
支持存储过程 支持 支持

2 连接方式

 先来看下两者连接数据库的方式:

// PDO 

$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); 

// mysqli, 面向过程方式

$mysqli = mysqli_connect('localhost','username','password','database'); 

// mysqli, 面向对象

$mysqli = new mysqli('localhost','username','password','database');

3 数据库支持

PDO支持多种数据库,但MYSQLI只支持MYSQL

4 命名参数name parameter

PDO的方式:

$params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600); 

$pdo->prepare(' 

SELECT * FROM users 

WHERE username = :username 

AND email = :email 

AND last_login > :last_login');

而MYSQLI则麻烦点,不支持这样,只能:

$query = $mysqli->prepare('

SELECT * FROM users

WHERE username = ?

AND email = ?

AND last_login > ?');

$query->bind_param('sss', 'test', $mail, time() - 3600);

$query->execute();

这样的话,一个个对问号的顺序,也比较麻烦,不大方便。

5 ORM映射的支持

比如有个类user,如下:

class User

{

    public $id;

    public $first_name;

    public $last_name;

    public function info()

    {

        return '#' . $this->id . ': ' . $this->first_name . ' ' . $this->last_name;

    }

}

$query = "SELECT id, first_name, last_name FROM users";

// PDO

$result = $pdo->query($query);

$result->setFetchMode(PDO::FETCH_CLASS, 'User');

while ($user = $result->fetch())

{

    echo $user->info() . "\n";

}

MYSQLI用面向过程的方式:

if ($result = mysqli_query($mysqli, $query)) {
while ($user = mysqli_fetch_object($result, 'User')) {

echo $user->info()."\n";

}

}

MYSQLI采用面向过程的方式:

// MySQLi, object oriented way

if ($result = $mysqli->query($query)) {
while ($user = $result->fetch_object('User')) {

echo $user->info()."\n";

}

}

6 防止SQL注入方面:

PDO 手工设置

$username = PDO::quote($_GET['username']);

$pdo->query("SELECT * FROM users WHERE username = $username");

使用mysqli

$username = mysqli_real_escape_string($_GET['username']);

$mysqli->query("SELECT * FROM users WHERE username = '$username'");

7 preparestament

 PDO方式:

$pdo->prepare('SELECT * FROM users WHERE username = :username');

$pdo->execute(array(':username' => $_GET['username']));

MYSQLI:

$query = $mysqli->prepare('SELECT * FROM users WHERE username = ?');

$query->bind_param('s', $_GET['username']);

$query->execute();

小伙伴们是否通过本文对于PHP的2种链接方式PDO和mysqli有了新的认识了呢,希望本文能对大家有所帮助。

PHP 相关文章推荐
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
php中的一些数组排序方法分享
Jul 20 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
PHP过滤★等特殊符号的正则
Jan 27 PHP
PHP下载远程文件到本地存储的方法
Mar 24 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 PHP
php屏蔽错误及提示的方法
May 10 PHP
Mac OS下配置PHP+MySql环境
Feb 25 #PHP
php禁止某ip或ip地址段访问的方法
Feb 25 #PHP
php+ajax实时刷新简单实例
Feb 25 #PHP
用php来限制每个ip每天浏览页面数量的实现思路
Feb 24 #PHP
php基于GD库画五星红旗的方法
Feb 24 #PHP
php获取文件名后缀常用方法小结
Feb 24 #PHP
php获取字符串中各个字符出现次数的方法
Feb 23 #PHP
You might like
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
理解javascript闭包
2015/12/15 Javascript
JavaScript File分段上传
2016/03/10 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
优秀英语专业毕业生求职信
2013/11/23 职场文书
安全标语大全
2014/06/10 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
员工教育培训协议书
2014/09/27 职场文书
元旦主持词开场白
2015/05/29 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript