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使用者状态管理功能的应用
Oct 09 PHP
一个程序下载的管理程序(四)
Oct 09 PHP
人大复印资料处理程序_输入篇
Oct 09 PHP
实现php加速的eAccelerator dll支持文件打包下载
Sep 30 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
php递归函数中使用return的注意事项
Jan 17 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
Feb 23 PHP
利用ajax+php实现商品价格计算
Mar 31 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
PHP学习之PHP运算符
2006/10/09 PHP
15种PHP Encoder的比较
2007/03/06 PHP
PHP 编写的 25个游戏脚本
2009/05/11 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
php查询及多条件查询
2017/02/26 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
js中reverse函数的用法详解
2013/12/26 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
python绘制立方体的方法
2018/07/02 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
python语言中有算法吗
2020/06/16 Python
python 如何引入协程和原理分析
2020/11/30 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
森林防火工作方案
2014/02/14 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
预备党员党支部意见
2015/06/02 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
欧元符号 €
2022/02/17 杂记