centos-rhel服务器相关 / php / 未分类 · 2015年8月5日

mysqli PDO 和 mysql

mysqli PDO 和 mysql 到底是什么和什么呀 是不是很晕哦 我也是 所以 收集一下
什么是PDO
PDO 即 PHP Data Object, PHP 数据对象,这是 PHP 的新式数据库访问接口。
PHP-MySQL 是 PHP 操作 MySQL 資料庫最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相對進階的功能,就 Extension 而言,本身也增加了安全性。而 PDO (PHP Data Object) 則是提供了一個 Abstraction Layer 來操作資料庫,用講的其實看不出來有有什麼差別,所以就直接看程式吧…
PDO 是官方推荐的,更为通用的数据库访问方式,如果你没有特殊需求,那么你最好学习和使用 PDO.但如果你需要使用 MySQL 所特有的高级功能,那么你可能需要尝试一下 MySQLi, 因为 PDO 为了能够同时在多种数据库上使用,不会包含那些 MySQL 独有的功能。
什么是MySQLi
MySQLi 是 MySQL 的增强接口,同时提供面向过程和面向对象接口,也是目前推荐的 MySQL 驱动,旧的C风格 MySQL 接口将会在今后被默认关闭。
MySQLi 的用法和以上两段代码相比,没有太多新概念,在此不再给出示例,可以参见 PHP 官网文档 http://www.php.net/manual/en/mysqli.quickstart.php
什么是MySQL
MySQL 是 PHP 操作 MySQL 数据库最原始的 Extension。MySQLi 的 i 代表 Improvement ,提供了相对进阶的功能,就 Extension 而言,本身也增加了安全性。而 PDO(PHP Data Object)则是提供了一个 Abstraction Layer 来操作数据库,光从理论上看不出来有什么差别,所以就直接看代码吧。
mysql是非持继连接函数而mysqli是永远连接函数。也就是说
mysql每次链接都会打开一个连接的进程而mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销
现在用php5.5 以上 已不用把mysqli作为扩展了吧
mysqli
mysqli扩展在PHP5.0.0中被引入。Mysql Native驱动在PHP5.3.0版本中被引入。
http://php.net/manual/zh/mysqli.installation.php
##PHP 5.5 和 5.6 内置的扩展 这个收集得好
以下的内置扩展会自动开启,这个列表没有包含 PHP 可使用的全部扩展,例如 [DOM](http://docs.php.net/dom),[JSON](http://docs.php.net/json),[PCRE](http://docs.php.net/pcre),[PDO](http://docs.php.net/pdo),其它的内置扩展可以通过配置 `composer.json` 来开启,参考下面的 **可选扩展** 章节。
– [Bzip2](http://docs.php.net/bzip2)
– [cURL](http://docs.php.net/curl)
– [FPM](http://docs.php.net/fpm)
– [mcrypt](http://docs.php.net/mcrypt)
– [MySQL(PDO)](http://docs.php.net/pdo_mysql)
– [MySQLi](http://docs.php.net/mysqli)
– [OPcache](http://docs.php.net/opcache)
– [OpenSSL](http://docs.php.net/openssl)
– [PostgreSQL](http://docs.php.net/pgsql)
– [PostgreSQL(PDO)](http://docs.php.net/pdo_pgsql)
– [Readline](http://docs.php.net/readline)
– [Sockets](http://docs.php.net/sockets)
– [Zip](http://docs.php.net/zip)
– [Zib](http://docs.php.net/zlib)
https://coding.net/u/FarmerLi/p/docs/git/raw/master/php.md
mysql 连接器
什么是Mysql自然驱动器
http://php.net/manual/zh/mysqli.overview.php#mysqli.overview.mysqlnd
另外一篇文章
1.什么是mysqlnd驱动?
PHP手册上的描述:
MySQL Native Driver is a replacement for the MySQL Client Library (libmysql).
MySQL Native Driver is part of the official PHP sources as of PHP 5.3.0.
mysqldnd即mysql native driver简写,即是由PHP源码提供的mysql驱动连接代码.它的目的是代替旧的libmysql驱动.
传统的安装php的方式中,我们在编译PHP时,一般需要指定以下几项:
–with-mysql=/usr/local/mysql
–with-pdo-mysql=/usr/local/mysql
这实际上就是使用了mysql官方自带的libmysql驱动, 这是比较老的驱动, PHP 5.3开始已经不建议使用它了, 而建议使用mysqlnd.
2. PDO与mysqlnd, libmysql又是何种关系?
PDO是一个应用层抽象类,底层和mysql server连接交互需要mysql驱动的支持. 也就是说无论你使用了何种驱动,都可以使用PDO.
PDO是提供了PHP应用程序层API接口,而mysqlnd, libmysql则负责与mysql server进行网络协议交互(它并不提供php应用程序层API功能)
3. 为何要使用mysqlnd驱动?
PHP官方手册描述:
A.libmysql驱动是由mysql AB公司(现在是oracle公司)编写, 并按mysql license许可协议发布,所以在PHP中默认是被禁用的.
而mysqlnd是由php官方开发的驱动,以php license许可协议发布,故就规避了许可协议和版权的问题
B.因为mysqlnd内置于PHP源代码,故你在编译安装php时就不需要预先安装mysql server也可以提供mysql client API (mysql_connect, pdo , mysqli), 这将减化一些工作量.
C. mysqlnd是专门为php优化编写的驱动,它使用了PHP本身的特性,在内存管理,性能上比libmysql更有优势. php官方的测试是:libmysql将每条记录在内存中保存了两份,而mysqlnd只保存了一份
D. 一些新的或增强的功能
http://zhangxugg-163-com.iteye.com/blog/1894990
Linux 下编译安装 PHP 5.6
http://blog.aboutc.net/linux/65/compile-and-install-php-on-linux
PHP独立编译安装扩展(mysqli,pdo-mysql)
http://liuqunying.blog.51cto.com/3984207/1570056
php 5.5 增加对mysqli的支持 现在好像不用这样了吧
php 5.3 以前的
mysqli的扩展给php用了。
cd /php-5.3.10/ext/mysqli
3.phpize 生成configure
4.如果在编译php对mysqli的支持的时候出现了如下错误:
checking whether to enable embedded MySQLi support… no
checking for mysql_set_server_option in -lmysqlclient… no
configure: error: wrong mysql library version or lib not found. Check config.log for more information.
则采用下面方法解决:
# yum -y install mysql-devel
# phpize
# ./configure –with-php-config= /php-config –enable-embedded-mysqli=shared –enable-shared
# make && make install
这时屏幕会打印mysqli.so生成的路径, 在php.ini里加载,重启php-cgi就可以了。
php安装扩展mysqli
#cd php-5.3.6/ext/mysqli
#/usr/local/webserver/php/bin/phpize
#./configure –with-php-config=/usr/local/webserver/php/bin/php-config
#make
#make instal
报错:
checking for MySQLi support… yes
checking whether to enable embedded MySQLi support… no
mysql_config not found
configure: error: Please reinstall the mysql distribution
加入配置
./configure –with-php-config=/usr/local/webserver/php/bin/php-config –with-mysqli=/usr/local/mysql/bin/mysql_config
编译通过
将生成的mysqli.so配置加入php.ini中
extension=mysqli.so