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 相关文章推荐
PHP5中使用PDO连接数据库的方法
Aug 01 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
PHP简单实现数字分页功能示例
Aug 24 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
PHP大文件切割上传功能实例分析
Jul 01 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 PHP
解决php extension 加载顺序问题
Aug 16 PHP
PHP isset()及empty()用法区别详解
Aug 29 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中explode与split的区别介绍
2012/10/03 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
2017/02/27 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
python安装Scrapy图文教程
2017/08/14 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
django的ORM模型的实现原理
2019/03/04 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
django连接oracle时setting 配置方法
2019/08/29 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
给男朋友的道歉信
2014/01/12 职场文书
大学生校园创业计划书
2014/02/08 职场文书
农村党支部书记司法四风问题对照检查材料
2014/09/26 职场文书
javascript实现计算器功能详解流程
2021/11/01 Javascript
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python
Golang数据类型和相互转换
2022/04/12 Golang