「PHP」数据库扩展安装

关于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的时候,会有以下几个选项:

–with-mysql=DIR Include MySQL support. DIR is the MySQL base
directory, if no DIR is passed or the value is

mysqlnd the MySQL native driver will be used

–with-mysqli=FILE Include MySQLi support. FILE is the path
to mysql_config. If no value or mysqlnd is passed

as FILE, the MySQL native driver will be used

–with-pdo-mysql=DIR PDO: MySQL support. DIR is the MySQL base directory
If no value or mysqlnd is passed as DIR, the

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