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 相关文章推荐
拼音码表的生成
Oct 09 PHP
PHP静态新闻列表自动生成代码
Jun 14 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
Smarty变量用法详解
May 11 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
详解php中curl返回false的解决办法
Mar 18 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实现过滤表单提交中html标签的方法
2014/10/17 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
vue中axios解决跨域问题和拦截器的使用方法
2018/03/07 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python多线程编程(五):死锁的形成
2015/04/05 Python
python类和继承用法实例
2015/07/07 Python
python抓取文件夹的所有文件
2018/02/27 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
优纳科技软件测试面试题
2012/05/15 面试题
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
校园安全教育广播稿
2014/02/17 职场文书
会议欢迎词范文
2015/01/27 职场文书
南京导游词
2015/02/03 职场文书
银行先进个人总结
2015/02/15 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
春节慰问简报
2015/07/21 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL