关于pdo、mysqli、mysql、mysqlnd、mysql client library之间的关系有的时候很容易记混乱。
PHP与MySQL:PDO、MySQLi、MySQL、Mysqlnd、MySQL Client Library之间的关系
MySQL – PHP’s MySQL Extension
用于PHP应用程序与MySQL数据库交互。 MySQL扩展提供了一个程序接口,这些接口适用于4.1.3以前的MySQL版本。此扩展可以与MySQL 4.1.3或更高版本一起使用,但并不是支持所有的最新的MySQL服务器功能。
MySQLi – MySQL Improved Extension
MySQLi,有时也被称为MySQL增强扩展。MySQLi扩展是对PHP MySQL扩展的增强,有很多好处:
- 面向对象;
- 支持预处理语句;
- 支持多重语句;
- 支持事务;
- 增强调试功能;
- 嵌入式服务器支持;
注意:如果使用MySQL 4.1.3或更高版本,强烈建议使用此扩展。
PDO – PHP Data Objects
这里的PDO指的是PDO_MySQL。
PDO是专门用于PHP应用程序的数据库抽象层,PDO为PHP应用程序提供一致的数据库访问API。如果使用了PDO API,无论应用程序连接的是什么数据库,只需对PHP代码进行微小的更改即可以切换到别的数据库服务器。
Mysqlnd
MySQL Native Driver is written in C as a PHP extension.
MySQL Native Driver is a replacement for the MySQL Client Library (libmysqlclient).
MySQL Client Library(libmysqlclient)
由MySQL数据库提供的驱动程序。通常在MySQL的包中。
关于pdo、mysqli、mysql、mysqlnd、mysql client library之间关系如下表:
角色 | 成员 | 描述 |
---|---|---|
PHP开发者 | mysql_connect、query等函数调用 | 应用开发者层,相关的函数调用。 |
PHP访问数据库的API | pdo、mysqli、mysql | 提供数据库操作API,函数库。 |
Low Level | mysql native drive(mysqlnd)、mysql client library | 数据库驱动、库; |
Mysql Database | 数据; |
PHP编译时的选项
这就是为什么编译的时候,当你查看help的时候,会有以下几个选项:
mysqlnd the MySQL native driver will be used
as FILE, the MySQL native driver will be used
MySQL native driver will be used
官方推荐的使用的也是Mysqlnd。
PHP与SQLServer:PDO_SQLSRV
安装unixodbc
安装pdo_sqlsrv
PDO_ODBC
PHP-5.6.31源码目录下的ext目录中的pdo_odbc扩展,使用phpize、configure、make install构建编译安装。
#1 checking for selected PDO ODBC flavour… configure: error: Unknown ODBC flavour yes
系统环境:Kali GNU/Linux Rolling
原因:为指定要使用的ODBC库
解决:构建时,使用–with-pdo-odbc=unixODBC,/usr指定要使用的ODBC库路径
#!/bin/bash ./configure \ --with-php-config=/usr/local/php-5.6.31/bin/php-config \ --with-pdo-odbc=unixODBC,/usr
MSSQL
PHP-5.6.31源码目录下的ext目录中的mssql扩展,使用phpize、configure、make install构建编译安装。
出现的问题
#1 configure: error: Could not find /usr/lib/libsybdb.a|so
系统环境:Kali GNU/Linux Rolling
原因:首先需要安装freetds,其次libsybdb.so位于/usr/lib/x86_64-linux-gnu下
解决:编译时,使用–with-libdir=指定库路径:
#!/bin/bash ./configure \ --with-php-config=/usr/local/php-5.6.31/bin/php-config \ --with-libdir=lib/x86_64-linux-gnu
参考文献
http://php.net/manual/en/mysqli.overview.php