首页 > php,数据库相关 > 浅析mysql、mysqli、PDO

浅析mysql、mysqli、PDO

接触PHP的人都会知道mysql_connect()这个经典的函数,它是用于连接MySQL数据库的,想必在这里不用介绍太多大家都明白。

在“改革开放”的今天,你是否还依然使用mysql_connect()呢?
在PHP5中,新增加了两个连接MySQL的方法,分别是PDO与mysqli。
对于mysqli,也许好多人听说过或者使用过,用法与mysql类似,或者是用面向对象的方法,传说这个会比mysql_connect的负载能力强。
对于PDO,不知道了解的人有多少,它是一个完全面向对象的连接方式,更换数据库类型时,也仅仅改很少的部分就可以完成,更主要的是它特别容易让人理解。也许有些人看到PDO的文档望而止步,也许有些人看到PDO是PHPChina中高级班而不是初级班的教程对它产生恐惧感(当年我也是这样),可是,如果你真正用到PDO的时候,会感觉到PDO真的是如此的简单。

PDO,MYSQL,MYSQLI 性能哪个比较好?这里我们来简单进行下对比。

普通的mysql连接肯定是会被抛弃的 因为每次都要防止sql注入的问题 而且相对来说比较慢。
mysqli是在普通mysql的基础上做的一次优化,说实话很成功,预处理方式完全解决了sql注入的问题。但是唯一的不足点 就是只支持mysql数据库。当然,如果你要是不操作其他的数据库,这无疑是最好的选择。
PDO则是最新出来的一种,连接方式兼容大部分数据库,也解决了sql注入。但是也有缺点,它只支持php5以上的版本(不过听说在未来的php6中只支持这种连接)。

PDO统一所有数据库抽象层对象接口,mysqli只统一mysql的。简单说,PDO可以实现同样的代码对不同数据库的操作,例如你从mysql迁移到mssql,程序基本不需要改动。而mysqli简单理解未mysql的封装就好。
在高负载的情况下,PDO开启长连接能够得到一个相对稳定的负载“值”。但是效率却不是最高的。 mysql最快。mysqli其次。只是mysql和mysqli在高并发、系统高负载的时候,其所承担的负载也是很可观的。PDO则不会。

也许你会说:“只不过是换一种思维、兼容的数据库多一些而已,我已经对mysql_connect的思维很熟悉了,至于兼容数据库,写几个类就可以的嘛。”PDO的优点并不止这些。你可以放一个Discuz(Discuz用的mysql_connect连接)局域网的服务器上(或者你的电脑),然后,用压力测试测试一下,两分钟后,访问你安装的论坛,肯定会报2002错误,因为访问量过大,连不上数据库了。
PDO的效率在这里不多说,网上炒作的很多,你可以去百度看一下,效率不是主要的,主要是负载量。
我做过测试,我们公司的一套Web2.0程序,在Linux操作系统,双核CPU,4G内存的服务器,用 mysql_connect连接数据库,做压力测试,load average已经到了80左右(越小越好)。mysql_pconnect和mysqli好像没挂,但是load average也是80左右,这时候,页面基本打不开(关于mysql_pconnect和mysqli的测试好像是这样,记不清了)。而PDO做压力测试时,页面很慢,但不会报任何错误,load average在20左右。以上测试是同一套程序,同一台机器上测试的(把数据库三种连接方式封装成类,改名,上传,测试)。

现在,你是不是有迁移PDO的冲动了?不过有些事情你必需要知道的。

  1. PDO虽然有如此多的优点,但是,PDO必需要改配置文件或编译(Linux)来加载它,如果你用的是虚拟主机,在PHPINFO中找不到PDO与pdo_mysql,那你还是放弃的,如果是自己的服务器,Windows可以改php.ini,打开pdo与pdo_mysql,Linux带上—with-pdo与—with-pdo_mysql来重新编译安装。
    2.如果你用的是PHP4,不想迁移到PHP5的话,也放弃吧,因为PDO只有PHP5才可以使用。

上一篇: linux多任务命令后台运行

下一篇: php下使用PDO创建sqlite3数据库