PDO vs.MySQLi 选择vs和sql 先安装哪一个个

博客访问: 2859384
博文数量: 659
博客积分: 15410
博客等级: 上将
技术积分: 6913
注册时间:
认证徽章:
独学而无友,则孤陋而寡闻!
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Python/Ruby
mysql表:2M,5W行:Mysql连接:
&&$link = mysql_connect('localhost', 'lcms2', 'abcd');
&&mysql_select_db("lcms2");
&&mysql_query("SET NAMES 'utf8'");
&&$time = microtime(1);
&&for ($i=1; $i&10000;$i
&&&&&& $sql = "SELECT * from `cl_translation` WHERE `varName`='my group'";
&&&&&& $result = mysql_query($sql,$link);
&&&&&& if (!$result) {
&&&&&&&&&&&&&&&&&&echo "Could not successfully run query ($sql) from DB: " . mysql_error();
&&&&&&&&&&&&&&&&&&&&&&&&&&exit;
&&&& & & & }
&&&&&& $rows = array();
&&&&& while ($row = mysql_fetch_assoc($result)) {
&&&&&&&&&&$rows[] = $row;
&&&&&&& & }&&& }
&&$intval_time = microtime(1) - $time;
&&echo $intval_time . "&br /&";
&&var_dump($rows);
PDO连接代码:&?php
&&$dsn = "mysql:dbname=lcms2;host=localhost";
&&$user = "lcms2";
&&$password = "abcd";
&&&&&&&&&&#$dbh = new pdo($dsn, $user, $password,array(PDO::ATTR_PERSISTENT =& true));
&&&&&&&&&&$dbh = new pdo($dsn, $user, $password);
&&} catch (PDOException $e){
&&&&&&&&&&echo "Connetion failed: " . $e-&getMessage();
&&$dbh-&exec("SET NAMEs 'utf8'");
&&$ph = array();
&&$time = microtime(1);
&&&&&&&&&&$sql = "SELECT * from `cl_translation` WHERE `varName`=:string";
&&&&&&&&&&$ph[0] = $dbh-&prepare($sql);
&&for ( $i=1; $i&10000; $i
&&&&&&&&&&$ph[0]-&execute(array('string'=&'my group'));
&&$result = $ph[0]-&fetchAll();
&&$intval_time = microtime(1) - $time;
&&echo $intval_time . "&br /&";
&&var_dump($result);
&&?&pdo直接查询,不用prepare语句:&?php
&&$time = microtime(1);
&&$dsn = "mysql:dbname=lcms2;host=localhost";
&&$user = "lcms2";
&&$password = "lsrzlcms";
&&&&&&&&&&#$dbh = new pdo($dsn, $user, $password,array(PDO::ATTR_PERSISTENT =& true));
&&&&&&&&&&$dbh = new pdo($dsn, $user, $password);
&&} catch (PDOException $e){
&&&&&&&&&&echo "Connetion failed: " . $e-&getMessage();
&&$dbh-&exec("SET NAMEs 'utf8'");
&&$ph = array();
&&for ( $i=1; $i&10000; $i
&&&&&&&&&&$sql = "SELECT * from `cl_translation` WHERE `varName`='my group'";
&&&&&&&&&&$ph = $dbh-&query($sql);
&&&&&&&&&&if ( !$ph ) {
&&&&&&&&&&&&&&&&&&var_dump($dbh-&errorInfo());
&&&&&&&&&&&&&&&&&&die("Error when execute query" );
&&&&&&&&&&}
&&$result = $ph-&fetchAll();
&&$dbh=NULL;
&&$intval_time = microtime(1) - $time;
&&echo $intval_time . "&br /&";
&&var_dump($result);
&&?&连接结果:第一次: 0.898s0.353520.09375改变id值0.370120.44922改变prepare的值:0.9950.598630.37207mysql驱动:0.999020.62012mysql 1000次0.150.12mysql 10000次:3.93.3.3pdo 10000次,包括prepare内的循环:0.910.98pdo 10000次,不包括prepare内的循环,只循环excute:0.030.pdo 不用statements语句,直接查询:0.0.810.89---------------------------------------------------害死人了,for后忘了加大括号,导致第一次进行mysql_select时,没有执行数据库查询!!!pdo的效率还是很高的,终于松了一口气!另外:PDO::MYSQL_ATTR_USE_BUFFERED_QUERY好像没有作用。保持连接对pdo查询影响不大,只影响连接。
阅读(4437) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
传智播客 韩顺平 php核心课程 12(使用php对mysql数据库进行操作的三种方式mysql mysqli pdo).ppt 42页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:100 &&
你可能关注的文档:
··········
··········
zend studio介绍
zend studio第一次亲密接触
对users表的增删改操作
$mysqli=new MySQLi(&localhost&,&root&,&root&,&test&);
if (mysqli_connect_errno()) {
die(&Connect failed: &. mysqli_connect_error());
echo $mysqli-&server_info.&&br/&&;
//如果是查询数据库
//$sql=&select *from user1&;
$sql=&delete from user1 where id=90&;
//$sql可以是 insert 和 update
$mysqli-&query(“set names gbk”); //这个设置很重要
$res=$mysqli-&query($sql);
//证明返回类型是什么
var_dump($res);
//判断需要技巧
if(!$res){
echo '失败.'.$mysqli-&
//看看受影响的行数
if($mysqli-&affected_rows&0){
echo '执行成功!';
echo '记录没有改变';
$mysqli-&close(); ****我封装的工具类SqlHelper.class.php**** &?php
class SqlHelper {
//因为php数据并不是常驻内存,因此做成static 和不做成static其实影响不大.
private static $host=&localhost&;
private static $user=&root&;
private static $root=&root&;
private static $db=&test&;
public function __construct(){
$this-&mysqli=new MySQLi(SqlHelper::$host,SqlHelper::$user,SqlHelper::$root,SqlHelper::$db);
if($this-&mysqli-&connect_error){
die($mysqli-&connect_error);
public function execute_dml($sql){
$b=$this-&mysqli-&query($sql);
return 0;//失败
if($this-&mysqli-&affected_rows&0){
return 1;//成功
return 2;//没有受影响的行数.
$this-&mysqli-&close();
} ?& * 这里给出一个建议,最好不要把 dml 语句 和dql 语句混用,这样不利用控制. *********************练习1的案例********************** $mysqli=new mysqli(&localhost&,&root&,&root&,&test&) or die(&失败&.mysqli_connect_error());
$mysqli-&query(&set names utf8&);
$sqls=&insert into user1 (name,email) values('宋江','songjiang@');&;
$sqls.=&insert into user1 (name,email) values('卢俊义','lujunyi@');&;
$sqls.=&insert into use
正在加载中,请稍后...PDO vs. MySQLi 选择哪一个?(PDO vs. MySQLi: Which Should You Use?) - CSDN博客
PDO vs. MySQLi 选择哪一个?(PDO vs. MySQLi: Which Should You Use?)
本文并非直译
用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 = new PDO(&mysql:host=dbname=database&, 'username', 'password');
// mysqli, procedural way
$mysqli = mysqli_connect('localhost','username','password','database');
// mysqli, object oriented way
$mysqli = new mysqli('localhost','username','password','database');
(请注意,这两个连接将贯穿全文)
PDO和MySQLi都提供了面向对象的API,但是MySQLi也提供了面向过程编程的API(就是函数式)所以对于新手非常易于理解,如果你使用原始的MySQL的API,那么迁移到MySQLi也非常容易。另一方面,一旦你选择了PDO,你就可以用在任何你想要使用的数据库上。
数据库支持
PDO比MySQLi的核心优势在于数据库的驱动支持上。再写这篇文章的时候,PDO支持12种数据库驱动,而MySQLi只支持MySQL。
通过下面的代码可以打印出当前PDO支持的数据库驱动
var_dump(PDO::getAvailableDrivers());
这意味着什么?
如果你选择了使用PDO的方式,当需要换数据库的时候,遇到不存在或者不支持的方法,你只需要更改连接字符串,以及一些查询语句即可,而MySQLi,则需要重新所有的查询以及连接方式。
名称式参数
这是PDO具有的一个非常重要的特性,采用名称式参数比数字式参数更加容易。
$params = array(':username' =& 'test', ':email' =& $mail, ':last_login' =& time() - 3600);
$pdo-&prepare('
SELECT * FROM users
WHERE username = :username
AND email = :email
AND last_login & :last_login');
$pdo-&execute($params);
而MySQLi的方式:
$query = $mysqli-&prepare('
SELECT * FROM users
WHERE username = ?
AND email = ?
AND last_login & ?');
$query-&bind_param('sss', 'test', $mail, time() - 3600);
$query-&execute();
这个问号(?)绑定参数看上去很短,但是相比名称式参数缺少了灵活性,而且迫使开发者必须保证参数的顺序,有时候让人觉得很蛋疼。
而且不幸的是MySQLi并不支持名称式参数。
PDO和MySQLi都可以将结果映射成对象。下面自定义一个User类和一些属性,并且字段和数据库的表字段对应。
class User {
public $first_
public $last_
public function info()
return '#'.$this-&id.': '.$this-&first_name.' '.$this-&last_
如果没有用对象映射,如果在使用inof()方法前,就要手工的给属性赋值,或者在初始化的时候赋值。
而采用对象映射就可以直接完成
$query = &SELECT id, first_name, last_name FROM users&;
$result = $pdo-&query($query);
$result-&setFetchMode(PDO::FETCH_CLASS, 'User');
while ($user = $result-&fetch()) {
echo $user-&info().&\n&;
// MySQLI, procedural way
if ($result = mysqli_query($mysqli, $query)) {
while ($user = mysqli_fetch_object($result, 'User')) {
echo $user-&info().&\n&;
// MySQLi, object oriented way
if ($result = $mysqli-&query($query)) {
while ($user = $result-&fetch_object('User')) {
echo $user-&info().&\n&;
最常见的当然是SQL注入了。而这两种连接数据的方式都提供了安全机制。
下面是一个简单通过$_GET方式注入的语句
$_GET['username'] = &'; DELETE FROM /*&
如果我们不对这个参数进行处理,则问题是显而易见的。而且PDO和MySQLi都支持多重查询。这样可能导致若干数据被删除掉。
对$_GET数据处理
// PDO, &manual& escaping
$username = PDO::quote($_GET['username']);
$pdo-&query(&SELECT * FROM users WHERE username = $username&);
// mysqli, &manual& escaping
$username = mysqli_real_escape_string($_GET['username']);
$mysqli-&query(&SELECT * FROM users WHERE username = '$username'&);
从上面的代码可以看出,PDO::quote不仅转义了字符串,而且还加了单引号,而MySQLi只是转义了字符串,需要自己手动加单引号。
下面是prepared statements的方式查询
// PDO, prepared statement
$pdo-&prepare('SELECT * FROM users WHERE username = :username');
$pdo-&execute(array(':username' =& $_GET['username']));
// mysqli, prepared statements
$query = $mysqli-&prepare('SELECT * FROM users WHERE username = ?');
$query-&bind_param('s', $_GET['username']);
$query-&execute();
推荐采用prepared statements的方式绑定查询来代替PDO::quote() 和 mysqli_real_escape_string().
PDO和MySQLi都有非常好的性能。在非prepared statements的基准测试下,MySQLi略快2.5%,而prepared statements下是6.5%,可以说对于性能无关紧要。如果你真的非常介意这一点点性能的话,而自带的MySQL扩展比两者都快,你可以考虑下它。
最后,综合情况PDO在这场对比中胜出,支持12种不同数据库驱动程序(18种不同的数据库)和………………为以上提到的……
所以结论就是:如果你现在还在使用MySQLi,你可以考虑换了。
原文链接地址参考:
本文已收录于以下专栏:
相关文章推荐
本文并非直译
用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢?
这篇文章将会介绍这两种方式的不同点,数据库的支持、稳定性、性能等问题。
在我的PHP开发过程中,数据库的采用都是使用mysql数据库,与数据库有关的操作基本上都是使用php中的mysql扩展函数,例如mysql_query,mysql_connect等函数,使用这些传统的...
PHP的MySQL扩展(优缺点)
设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程 的接口;
并且是针对MySQL4.1.3或更早版本设计的。因此,...
一、php手册关于mysql的说明:     
This extension is not recommended for writing new code. Instead, either th...
本文并非直译
用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢?
这篇文章将会介绍这两种方式的不同点,数据库的支持、稳定性、性能等问题。
服务器重新配置了下,自己的一个项目刚预开发遇到了个问题
大早上起来看了下phpinfo() 的页面  好吧!上次偷懒,只有个mysql 的扩展
于是找了资料开始增加扩展:
详细如下不废话了
首先安装mysqli扩展
cd /usr/local/src/php-7.17/ext/
/usr/local/php/bin/phpize
./configur...
* Created by JetBrains PhpStorm.
* User: 张华
* Date: 14-3-8
* Time: 下午12:21
* QQ: 7465...
php连接到mysql数据库,经典的方式就是使用mysql_connect(),具体代码如下:
PHP-MySQL 是 PHP 操作 MySQL 資料庫最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相對進階的功能,就 Extension 而言...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)WP DB Driver & WordPress Plugins
Code is Poetry.}

我要回帖

更多关于 vs2017安装时如何选择 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信