PDO和mysqli对比

PHP中,如何选择PDO和mysqli呢?本文做个简单的比较

1)总的比较

  PDO MYSQLI
数据库支持 12种不同的数据库支持 支持MYSQL
API OOP OOP和过程
命名参数 支持 不支持
对象映射支持 支持 支持
preparestment 支持 不支持
支持存储过程 支持 支持
     

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();

时间: 2024-10-31 09:34:10

PDO和mysqli对比的相关文章

php pdo和mysqli对比选择

1)总的比较   PDO MySQLi 数据库支持 12种不同的数据库支持 支持MySQL API OOP OOP + 过程 Connection Easy Easy 命名参数 支持 不支持 对象映射支持 支持 支持 预处理语句 (客户端) 支持 不支持 性能 快 快 支持存储过程 支持 支持 2 连接方式 先来看下两者连接数据库的方式: // PDO $pdo = new PDO("mysql:host=localhost;dbname=database", 'username',

PDO和MySQLi区别与选择?

当用PHP访问数据库时,除了PHP自带的数据库驱动,我们一般还有两种比较好的选择:PDO和MySQLi.在实际开发过程中要决定选择哪一种首先要对二者有一个比较全面的了解.本文就针对他们的不同点进行分析,并对多数据库类型支持.稳定性.性能等等方面进行对比.   PDO MySQLi Database support 12 different drivers MySQL only API OOP OOP + procedural Connection Easy Easy Named paramete

PDO vs. MySQLi 选择哪一个?(PDO vs. MySQLi: Which Should You Use?)-转载

用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢? 这篇文章将会介绍这两种方式的不同点,数据库的支持.稳定性.性能等问题. 概述   PDO MySQLi Database support 12 different drivers MySQL only API OOP OOP + procedural Connection Easy Easy Named parameters Yes No Object mapping Yes Yes Prepared stat

PDO和MySQLi , MySQL区别与选择?

当用PHP访问数据库时,除了PHP自带的数据库驱动,我们一般还有两种比较好的选择:PDO和MySQLi.在实际开发过程中要决定选择哪一种首先要对二者有一个比较全面的了解.本文就针对他们的不同点进行分析,并对多数据库类型支持.稳定性.性能等等方面进行对比. PDO MySQLi Database support 12 different drivers MySQL only API OOP OOP + procedural Connection Easy Easy Named parameters

PDO和MySQLi区别和数度;到底用哪个?

当用PHP访问数据库时,除了PHP自带的数据库驱动,我们一般还有两种比较好的选择:PDO和MySQLi.在实际开发过程中要决定选择哪一种首先要对二者有一个比较全面的了解.本文就针对他们的不同点进行分析,并对多数据库类型支持.稳定性.性能等等方面进行对比.   PDO MySQLi Database support 12 different drivers MySQL only API OOP OOP + procedural Connection Easy Easy Named paramete

PDO PDO_MYSQL MYSQLI MYSQL 的区别

MYSQL,MYSQLI 这两个扩展本身就是访问MYSQL数据库的驱动 PDO则是一个抽象层概念 PDO_MYSQL 和 MySQL Native(mysqlnd)是实现了PDO接口的MYSQL数据库驱动 从下表可以看出他们之间是怎样的并列关系   PHP的mysqli扩展 PDO (使用PDO MySQL驱动和MySQL Native驱动) PHP的mysql扩展 引入的PHP版本 5.0 5.0 3.0之前 PHP5.x是否包含 是 是 是 MySQL开发状态 活跃 在PHP5.3中活跃 仅

php的mysql\mysqli\PDO(二)mysqli

原文链接:http://www.orlion.ga/1147/ mysqli有面向对象风格和面向过程风格,个人感觉还是用面向对象风格比较好(毕竟是面向对象) 1.mysqli::_construct() mysqli::__construct ([ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $

PDO预处理语句PDOStatement对象使用总结

PDO预处理语句PDOStatement对象使用总结 PDO对预处理语句的支持需要使用PDOStatement类对象,但该类对象并不是通过NEW关键字实例化出来的,而是通过PDO对象中的prepare()方法,在数据库服务器中准备好一个预处理的SQL语句后直接返回的.如果通过之前执行PDO对象中的query()方法返回的PDOStatement类对象,只代表的是一个结果集对象.而如果通过执行PDO对象中的prepare()方法产生的PDOStatement类对象,则为一个查询对象,能定义和执行参

《PHP基础知识总结》系列文章归档

<PHP基础知识总结>系列文章归档 总结PHP基础知识,对初学者还是高手都值得参考巩固. 1PHP检查库或函数是否可用的方法 2关于PHP5 Session生命周期介绍 3PHP页面和Mysql数据库的转UTF8编码问题总结 4WAMP5的配置问题 5揭秘PHP深受Web开发者喜爱的原因 6php获取客户端电脑屏幕参数的方法 7PHP中浮点数计算比较及取整不准确的解决方法 8对于PHP中命名空间概念的入门理解 9php5.4以下版本json不支持不转义内容中文的解决方法 10PHP相关面试中最