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获取当前文件所在目录 getcwd()函数
May 13 PHP
PHP session会话的安全性分析
Sep 08 PHP
PHP中session变量的销毁
Feb 27 PHP
php多个文件及图片上传实例详解
Nov 10 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
Jan 07 PHP
php实现PDO中捕获SQL语句错误的方法
Feb 16 PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 PHP
PHP小白必须要知道的php基础知识(超实用)
Oct 10 PHP
完美的php分页类
Oct 24 PHP
PHP实现验证码校验功能
Nov 16 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 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 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
php表单提交实例讲解
2015/11/12 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
ExtJS下grid的一些属性说明
2009/12/13 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
Python之os操作方法(详解)
2017/06/15 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
解决python3输入的坑——input()
2020/12/05 Python
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
《莫高窟》教学反思
2014/02/25 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
应聘护士求职信
2014/07/21 职场文书
优秀班集体申报材料
2014/12/25 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
Python3接口性能测试实例代码
2021/06/20 Python