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 相关文章推荐
用mysql内存表来代替php session的类
Feb 01 PHP
PHP类的使用 实例代码讲解
Dec 28 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
Jun 13 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 PHP
对淘宝URL中ID提取的PHP代码
Sep 01 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
PHP常用数组函数介绍
Jul 28 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
如何利用PHP实现上传图片功能详解
Sep 24 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+javascript实现二级级联菜单的制作
2008/05/06 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
python开发之文件操作用法实例
2015/11/13 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
详解Python3中ceil()函数用法
2019/02/19 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
竞聘书怎么写,如何写?
2014/03/31 职场文书
爱心捐款倡议书
2014/04/14 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
详细了解java监听器和过滤器
2021/07/09 Java/Android