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实现的四则运算表达式计算实现代码
Aug 02 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
php生成扇形比例图实例
Nov 06 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
Apr 30 PHP
PHP中Session可能会引起并发问题
Jun 26 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
yii数据库的查询方法
Dec 28 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 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
将二维数组转为一维数组的2种方法
2014/05/26 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
Django celery异步任务实现代码示例
2020/11/26 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
存储过程和函数的区别
2013/05/28 面试题
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
村干部培训班主持词
2014/03/28 职场文书
爱护公共设施的标语
2014/06/24 职场文书
企业挂职心得体会
2014/09/10 职场文书
社区宣传标语口号
2015/12/26 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
Python函数对象与闭包函数
2022/04/13 Python
mysql数据库隔离级别详解
2022/06/16 MySQL
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers