php连接到mysql数据库服务器时三种主要的api:mysql,mysqli,pdo区别及联系
也是常用的扩展 ,哪么他们的性能孰优呢?
其实都好,只是相比较而言还有更好(我喜欢pdo) bind_param('dsss', $source_id, $source_name, $source_gender, $source_location); $stmt->execute(); $stmt->bind_result($id, $name, $gender, $location); while ($stmt->fetch()) { echo $id . $name . $gender . $location; } $stmt->close(); $mysqli->close(); /**但看到这边又发现了一些缺点,例如得 bind result,这个就有点多馀,不过这其实无关紧要,因为最大的问题还是在于这不是一个抽象(abstraction)的方法,所以当后端更换资料库的时候,就是痛苦的开始… 于是 pdo 就出现了详细出处参考:http://www.jb51.net/article/28103.htm*/// 2.pdo与mysql/*pdo是php5.1之后才支持的,他为访问数据库采用了一致性的接口。但是国内众多的开源程序都是使用mysql的extension所提供的function连接数据库,进行查询。pdo功能强大为何国内成熟的php系统都不使用呢?问过几个朋友为啥用pdo,答案是“快”,pdo连接数据库会快么?为什么使用pdo?他们两种方式有什么区别?首先还是比较关心的性能问题.写了1个脚本测试向mysql插入100万条数据。*/$link = mysql_connect(localhost, root, root) or die('mysql connect error');$num = 100000;$dsn = mysql:host=127.0.0.1;dbname=performace_test;$db = new pdo($dsn, 'root', 'root', array(pdo::attr_persistent => true));mysql_query('truncate table `performace_test`.`myquery`',$link); //truncate table$query = insert into `performace_test`.`myquery`(`goods_id`,`cat_id`,`click_count`,`goods_number`,`goods_weight`,`goods_sn`,`goods_name`,`goods_reason`,`brand_name`,`goods_thumb`,`brand_id`,`is_on_sale`,`wap_cod`,`wap_title`,`wap_detail`,`wap_flag`,`wap_onsale`,`shop_price`,`cost_price`,`channel_rate`,`channel_onsale`,`add_time`,`is_main`,`last_update`,`brand_logo`) values ( ’80′,’298′,’65′,’100′,’0.125′,’smt000080′,’健康′,”,’健康120’,'images/201004/thumb_img/80_thumb_g_1272071721054.jpg’,’1′,’0′,’0′,null,null,null,’0′,’2980.00′,’0.00′,’1.250000′,’1′,’1271612064′,’0′,’1297624384′,’1293649512083026412.jpg’);$start_time = microtime(true);for($i=0;$i{mysql_query($query,$link);}echo use mysql extension: . (microtime(true)-$start_time);mysql_query(‘truncate table `performace_test`.`myquery`’,$link); //truncate table$start_time = microtime(true);for($i=0;$i{$db->exec($query);}echo \r\nuse pdo : . (microtime(true)-$start_time);/**use mysql extension: 95.233189106suse pdo : 99.1193888187s在链接mysql上几乎没有区别。pdo的性能损失完全可以忽略不计。但是却有非常多的操作却是mysql扩展库所不具备的:1:pdo真正的以底层实现的统一接口数库操作接口2:pdo支持更高级的db特性操作,如:存储过程的调度等,mysql原生库是不支持的.3:pdo是php官方的pecl库,兼容性稳定性必然要高于mysql extension,可以直接使用 pecl upgrade pdo 命令升级php6默认也是使用pdo进行数据库链接,mysql extension会作为辅助。所以我们在日常项目中,如果环境允许,尽可能去使用pdo来进行mysql数据库操作。?>
复制代码