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实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
javascript 小型动画组件与实现代码
Jun 02 PHP
小文件php+SQLite存储方案
Sep 04 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
php实现的双向队列类实例
Sep 24 PHP
php有道翻译api调用方法实例
Dec 22 PHP
php对象和数组相互转换的方法
May 12 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
Sep 20 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
php is_writable判断文件是否可写实例代码
Oct 13 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和editplus正则表达式去除空白行
2015/04/17 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
python/golang 删除链表中的元素
2020/09/14 Python
掌上明珠Java程序员面试总结
2016/02/23 面试题
如何写好优秀的创业计划书
2014/01/30 职场文书
趣味运动会活动方案
2014/02/12 职场文书
《秋游》教学反思
2014/04/24 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
邀请函的格式
2015/01/30 职场文书
主持稿开场白
2015/06/01 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android
Redis keys命令的具体使用
2022/06/05 Redis