PDO vs.mysqli pdo 区别选择哪一个

11888人阅读
本文并非直译
用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢?
这篇文章将会介绍这两种方式的不同点,数据库的支持、稳定性、性能等问题。
Database support
12 different drivers
MySQL only
OOP + procedural
Connection
Named parameters
Object mapping
Prepared statements&
(client side)
Performance
Stored procedures
下面是两种连接数据库的方式
(请注意,这两个连接将贯穿全文)
PDO和MySQLi都提供了面向对象的API,但是MySQLi也提供了面向过程编程的API(就是函数式)所以对于新手非常易于理解,如果你使用原始的MySQL的API,那么迁移到MySQLi也非常容易。另一方面,一旦你选择了PDO,你就可以用在任何你想要使用的数据库上。
数据库支持
PDO比MySQLi的核心优势在于数据库的驱动支持上。再写这篇文章的时候,PDO支持12种数据库驱动,而MySQLi只支持MySQL。
通过下面的代码可以打印出当前PDO支持的数据库驱动
这意味着什么?
如果你选择了使用PDO的方式,当需要换数据库的时候,遇到不存在或者不支持的方法,你只需要更改连接字符串,以及一些查询语句即可,而MySQLi,则需要重新所有的查询以及连接方式。
名称式参数
这是PDO具有的一个非常重要的特性,采用名称式参数比数字式参数更加容易。
而MySQLi的方式:
这个问号(?)绑定参数看上去很短,但是相比名称式参数缺少了灵活性,而且迫使开发者必须保证参数的顺序,有时候让人觉得很蛋疼。
而且不幸的是MySQLi并不支持名称式参数。
PDO和MySQLi都可以将结果映射成对象。下面自定义一个User类和一些属性,并且字段和数据库的表字段对应。
如果没有用对象映射,如果在使用inof()方法前,就要手工的给属性赋值,或者在初始化的时候赋值。
而采用对象映射就可以直接完成
最常见的当然是SQL注入了。而这两种连接数据的方式都提供了安全机制。
下面是一个简单通过$_GET方式注入的语句
如果我们不对这个参数进行处理,则问题是显而易见的。而且PDO和MySQLi都支持多重查询。这样可能导致若干数据被删除掉。
对$_GET数据处理
从上面的代码可以看出,PDO::quote不仅转义了字符串,而且还加了单引号,而MySQLi只是转义了字符串,需要自己手动加单引号。
下面是prepared statements的方式查询
推荐采用prepared statements的方式绑定查询来代替PDO::quote() 和 mysqli_real_escape_string().
PDO和MySQLi都有非常好的性能。在非prepared statements的基准测试下,MySQLi略快2.5%,而prepared statements下是6.5%,可以说对于性能无关紧要。如果你真的非常介意这一点点性能的话,而自带的MySQL扩展比两者都快,你可以考虑下它。
最后,综合情况PDO在这场对比中胜出,支持12种不同数据库驱动程序(18种不同的数据库)和………………为以上提到的……
所以结论就是:如果你现在还在使用MySQLi,你可以考虑换了。
原文链接地址参考:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:339214次
积分:3364
积分:3364
排名:第8379名
原创:90篇
转载:32篇
评论:28条
(1)(1)(1)(6)(7)(20)(4)(2)(9)(8)(6)(9)(2)(5)(4)(1)(21)(12)(3)博客访问: 71871
博文数量: 25
注册时间:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
php5模块pdo、pdo_mysql、mysqli的添加一、环境LAMP都是源码安装,PHP安装的时候没有配置pdo_mysql和mysqli,pdo是php5默认带的。PHP5的源码都在,只需要把php5的模块功能扩展就可以了。php源码目录:/usr/local/src/php-5.2.10php安装目录:/usr/local/php/php源码配置文件:/usr/local/php/bin/php-configphp程序配置文件:/usr/local/php/etc/php.ini二、模块的编译安装[root@anpc ~] cd /usr/local/src/php-5.2.10/ext/pdo[root@anpc pdo] /usr/local/php/bin/phpize [root@anpc pdo] ./configure --with-php-config=/usr/local/php/bin/php-config[root@anpc pdo] make[root@anpc pdo] make test[root@anpc pdo] make install[root@anpc ~] cd /usr/local/src/php-5.2.10/ext/pdo_mysql[root@anpc pdo_mysql] /usr/local/php/bin/phpize[root@anpc pdo_mysql] ./configure --with-php-config=/usr/local/php/bin/php-config& --with-pdo-mysql=/usr/local/mysql[root@anpc pdo_mysql] make[root@anpc pdo_mysql] make test[root@anpc pdo_mysql] make install[root@anpc ~] cd /usr/local/src/php-5.2.10/ext/mysqli[root@anpc mysqli] /usr/local/php/bin/phpize[root@anpc mysqli] ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/mysql/bin/mysql_config[root@anpc mysqli] make[root@anpc mysqli] make test [root@anpc mysqli] make install备注:注意安装时目录的位置一定要正确,不然模块不能加载。命令/usr/local/php/bin/phpize必须在安装的目录执行。&安装完后会产生三个so模块:/usr/local/php/lib/php/extensions/no-debug-zts-/pdo.so/usr/local/php/lib/php/extensions/no-debug-zts-/pdo_mysql.so/usr/local/php/lib/php/extensions/no-debug-zts-/mysqli.so三、PHP配置文件的配置更改php.ini配置,添加模块:vi /usr/local/php/etc/php.ini extension=/usr/local/php/lib/php/extensions/no-debug-zts-/pdo.soextension=/usr/local/php/lib/php/extensions/no-debug-zts-/pdo_mysql.soextension=/usr/local/php/lib/php/extensions/no-debug-zts-/mysqli.so服务重启:service mysqld restartservice apached restart四、环境测试:1、php5环境查看(建立php函数):vi phpinfo.php<?phpphpinfo();?>访问phpinfo.php页面,查看模块扩展存不存在:http://127.0.0.1/phpinfo.php备注:如果函数不能使用,更改配置开放函数的使用权限。[root@anpc ~] vi /usr/local/php/etc/php.inidisable_functions = phpinfo,passthru,.....删除phpinfo这个函数保存即可。[root@anpc ~] service apached restart2、mysqli连接测试(建立网页测试连接)。vi mysqlidb.php<?php$mysqli = new mysqli("localhost", "dbusername", "dbpassword", "dbname");/* check connection */if (mysqli_connect_errno()) {&&& printf("Connect failed: %s\n", mysqli_connect_error());&&& exit();}printf("Host information: %s\n", $mysqli->host_info);/* close connection */$mysqli->close();?>访问建立的php测试页:http://127.0.0.1/mysqlidb.php&
阅读(12823) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 php pdo mysqli 的文章

 

随机推荐