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 相关文章推荐
第九节--绑定
Nov 16 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
ThinkPHP中的关联模型注意点
Jun 16 PHP
浅谈php自定义错误日志
Feb 13 PHP
php中使用sftp教程
Mar 30 PHP
php根据日期显示所在星座的方法
Jul 13 PHP
PHP线程的内存回收问题
Jul 08 PHP
thinkPHP5.0框架命名空间详解
Mar 18 PHP
php删除数组指定元素实现代码
May 03 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 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
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
js获取图片长和宽度的代码
2009/11/24 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
JS获取input[file]的值并显示在页面的实现方法
2018/03/09 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
python中Flask框架简单入门实例
2015/03/21 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python如何定义有可选参数的元类
2020/07/31 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
python help函数实例用法
2020/12/06 Python
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
实习护理工作自我评价
2013/09/25 职场文书
财务人员个人求职信范文
2013/12/04 职场文书
二手房购房意向书
2015/05/09 职场文书
新员工辞职信范文
2015/05/12 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
Go语言空白表示符_的实例用法
2021/07/04 Golang
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL