PHP 5 3以上版本推薦使用mysqlnd驅動

2022-04-03 15:55:39 字數 2971 閱讀 7553

什麼是mysqlnd?

mysqldnd(mysql

傳統的安裝php的方式中,我們在編譯php時,一般指定以下幾項:

--with-mysql=/usr/local/mysql \

--with-mysqli=/usr/local/mysql/bin/mysql_config \

--with-pdo-mysql=/usr/local/mysql/bin/mysql_config \

這實際上就是使用了mysql官方自帶的libmysql驅動, 這是比較老的驅動, php 5.3開始已經不建議使用它了, 而建議使用mysqlnd。

pdo與mysqlnd, libmysql又是何種關係?

pdo是乙個應用層抽象類,底層和mysql server連線互動需要mysql驅動的支援。也就是說無論你使用了何種驅動,都可以使用pdo。

pdo是提供了php應用程式層api介面,而mysqlnd、libmysql則負責與mysql server進行網路協議互動(它並不提供php應用程式層api功能)。

為什麼使用mysqlnd驅動?

1. 傳統的php訪問mysql資料庫,是通過mysql資料庫的libmysql client庫,這個libmysql client是用c/c++編寫的,雖然一直以來php通過libmysql訪問資料庫效能也一直很好,但是卻無法利用php本身的很多特性。

mysqlnd提供了和zend引擎高度的整合性,更加快速的執行速度,更少的記憶體消耗,利用了php的stream api,以及客戶段快取機制。由於mysqlnd是透過zend引擎,因此提供更多高階特性,以及有效利用zend進行加速,原理圖如下:

從上圖可以看出來,libmysql是直接訪問資料庫的,而mysqlnd是通過zend訪問資料庫。

2. libmysql驅動是由mysql ab公司(現在是oracle公司)編寫, 並按mysql license許可協議發布,所以在php中預設是被禁用的。而mysqlnd是由php官方開發的驅動,以php license許可協議發布,故就規避了許可協議和版權的問題

3. mysqlnd內置於php源**,故你在編譯安裝php時就不需要預先安裝mysql server也可以提供mysql client api (mysql_connect、pdo、mysqli),這將減化一些工作量

4. 一些新的或增強的功能

怎麼安裝mysqlnd驅動?

--with-mysql=mysqlnd \

--with-mysqli=mysqlnd \

--with-pdo-mysql=mysqlnd \

註解:--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-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

--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

如果在phpinfo輸出的mysql項中發現client api version  : mysqlnd, 說明mysqlnd驅動安裝成功.

《lnmp、lamp、lanmp一鍵安裝包》中使用mysqlnd驅動php完整編譯引數:

'./configure''--prefix=/usr/local/php''--with-config-file-path=/usr/local/php/etc'\

'--with-fpm-user=www''--with-fpm-group=www''--enable-fpm''--enable-opcache'\

'--with-mysql=mysqlnd''--with-mysqli=mysqlnd''--with-pdo-mysql=mysqlnd'\

'--disable-fileinfo''--with-iconv-dir=/usr/local''--with-freetype-dir''--with-jpeg-dir'\

'--with-png-dir''--with-zlib''--with-libxml-dir=/usr''--enable-xml''--disable-rpath'\

'--enable-bcmath''--enable-shmop''--enable-exif''--enable-sysvsem''--enable-inline-optimization'\

'--with-curl''--enable-mbregex''--enable-mbstring''--with-mcrypt''--with-gd'\

'--enable-gd-native-ttf''--with-openssl''--with-mhash''--enable-pcntl''--enable-sockets'\

'--with-xmlrpc''--enable-ftp''--with-gettext''--enable-zip''--enable-soap''--disable-ipv6'\

'--disable-debug

PHP 5 3以上版本推薦使用mysqlnd驅動

什麼是mysqlnd?mysqldnd mysql 傳統的安裝php的方式中,我們在編譯php時,一般指定以下幾項 with mysql usr local mysql with mysqli usr local mysql bin mysql config with pdo mysql usr l...

php5 3使用手冊,php5 3 注意事項說明

php5.3 新特性1.支援命名空間 namespace 5.3以前 class zend db table select 表示當前這個類檔案位於zend db table下 5.3namespace zend db table class select 2.支援延遲靜態繫結5.3以前 class ...

php5 3使用手冊,php5 3 注意事項說明

本篇文章是對php5.3中需要注意的一些事項進行了詳細的分析介紹,需要的朋友參考下 php5.3 新特性1.支援命名空間 namespace 5.3以前 class zend db table select 表示當前這個類檔案位於zend db table下 5.3namespace zend db...