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 相关文章推荐
在PWS上安装PHP4.0正式版
Oct 09 PHP
PHP中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
PHP查询快递信息的方法
Mar 07 PHP
PHP使用自定义方法实现数组合并示例
Jul 07 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
PHP上传文件及图片到七牛的方法
Jul 25 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
2015/08/22 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
js实现常用排序算法
2016/08/09 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
r.js来合并压缩css文件的示例
2018/04/26 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
python更新列表的方法
2015/07/28 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
Python列表解析操作实例总结
2020/02/26 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
什么是Python包的循环导入
2020/09/08 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
纬创Java面试题笔试题
2014/10/02 面试题
小学班级口号
2014/06/09 职场文书
租房协议书范例
2014/10/14 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
详解PHP设计模式之依赖注入模式
2021/05/25 PHP