LAMP 架构——php 中 mysql,mysqli,mysqlnd,pdo 到底是什么

php 中 mysql,mysqli,mysqlnd,pdo 到底是什么

最开始的初学者,往往搞不清 mysqli,mysqlnd,pdo 到底是什么,下面先直接贴出最直观的名字吧。

MYSQL:This extension is deprecated as of PHP 5.5.0, and has been removed as of PHP 7.0.0. 
MYSQLI: MySQL Improved Extension 
MySQLND: MySQL Native Drive 
PDO:The PHP Data Objects。extension defines a lightweight, consistent interface for accessing databases in PHP。

中文: MYSQL 也叫 Original
MySQL,PHP4 版本的 MYSQL 扩展,从 PHP5 起已经被废弃,并别从 PHP7 开始已经被移除。

MYSQLI 叫做 “MySQL 增强扩展”。

MYSQLND MYSQL NATIVE DIRVER 叫做 MYSQL “官方驱动”或者更加直接点的叫做“原生驱动”

PDO PHP Data Objects PHP 数据对象,是 PHP 应用中的一个数据库抽象层规范。

以上摘自 PHP 官方手册: http://php.net/manual/en/book.mysqli.php


什么是 API?

一个应用程序接口(Application Programming Interface 的缩写),定义了类,方法,函数,变量等等一切
你的应用程序中为了完成特定任务而需要调用的内容。在 PHP 应用程序需要和数据库进行交互的时候所需要的 API
通常是通过 PHP 扩展暴露出来(给终端 PHP 程序员调用)。

说明:上文所说的 MYSQL 和 MYSQLI 扩展就提供了这样的 API。


什么是驱动?

驱动是一段设计用来于一种特定类型的数据库服务器进行交互的软件代码。驱动可能会调用一些库,比如 MySQL 客户端库或者 MySQL
Native 驱动库。 这些库实现了用于和 MySQL 数据库服务器进行交互的底层协议。


总体来说:

从应用的层面上看,我们通过 PHP 的 MYSQL 或者 MYSQLi 扩展提供的 API 去操作数据库。

从底层来看,MYSQLND 提供了底层和数据库交互的支持 (可以简单理解为和 MySQL server 进行网络协议交互)。

而 PDO,则提供了一个统一的 API 接口,使得你的 PHP 应用不去关心具体要连接的数据库服务器系统类型。也就是说,如果你使用 PDO 的 API,可以在任何需要的时候无缝切换数据库服务器。比如 MYSQL,SQLITE 任何数据库都行。

即从大部分功能上看,PDO 提供的 API 接口和 MYSQLI 提供的接口对于普通的增删改查效果是一致的。


MYSQL 连接:

<?php

$conn = @ mysql_connect("localhost", "root", "") or die("数据库连接错误");

mysql_select_db("bbs", $conn);

mysql_query("set names 'utf8'");

echo "数据库连接成功";

?>

MYSQLI 连接:

<?php

$conn = mysqli_connect('localhost', 'root', '', 'bbs');

if(!$conn){

die("数据库连接错误" . mysqli_connect_error());

}else{

echo"数据库连接成功";

}

?>

PDO 连接:

<?php

try{

$pdo=new pdo("mysql:host=localhost;dbname=bbs","root","");

}catch(PDDException $e){

echo"数据库连接错误";

}

echo"数据库连接成功";

?>