PDO vs.MySQLivscode 选择多行哪一个

PHP 的 pdo_MySQL 与 MySQLi,二者都用长连接,哪个更快? - 知乎15被浏览7989分享邀请回答2添加评论分享收藏感谢收起1 个回答被折叠()PHP中MySQL、MySQLi和PDO的用法和区别 - CSDN博客
PHP中MySQL、MySQLi和PDO的用法和区别
PHP的MySQL扩展(优缺点)
设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程 的接口;
并且是针对MySQL4.1.3或更早版本设计的。因此,这个扩展虽然可以与MySQL4.1.3或更新的数 ;
据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性。
PHP的mysqli扩展
mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性;
mysqli扩展在PHP 5及以后版本中包含;
mysqli扩展有一系列的优势,相对于mysql扩展的提升主要有:面向对象接口、 prepared语句支持、多语句执行支持、事务支持、增强的调试能力、嵌入式服务支持。
PHP数据对象(PDO)
PHP数据对象,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以,使得你的PHP应用不去关心具体要 连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器。
下面是我这个星期做过的几种数据库连接的方式:
Mysql连接:
= @ mysql_connect(&localhost&,&&root&,&&&)&or
die(&数据库连接错误&);
mysql_select_db(&bbs&,&$conn);
mysql_query(&set
names 'utf8'&);
&数据库连接成功&;
Mysqli连接:
= mysqli_connect('localhost',&'root',&'',&'bbs');
if(!$conn){
die(&数据库连接错误&
. mysqli_connect_error());
echo&数据库连接成功&;
pdo(&mysql:host=dbname=bbs&,&root&,&&);
}catch(PDDException&$e){
echo&数据库连接错误&;
echo&数据库连接成功&;
以下是我在网站看到的Mysql、Mysqli、Pdo三种方式的区别对比
*********************************************************************************************************************************
PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,
提更了相对进阶的功能,就 Extension 而言,本身也增加了安全性。
而 PDO (PHP Data Object) 则是提供了一个 Abstraction Layer 来操作资料库
1.mysql与mysqli
mysqli是php5提供的新函数库,(i)表示改进,其执行速度更快.当然也更安全
mysql是非持继连接函数而mysqli是永远连接函数。也就是说
mysql每次链接都会打开一个连接的进程而mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销 有些朋友在编程的时候,使用new mysqli(‘localhost’, usenamer’, ‘password’, ‘databasename’);总是报
错,Fatal error: Class ‘mysqli’ not found in d:\…
mysqli类不是php自带的吗?
不是默认开启的,win下要改php.ini,去掉php_mysqli.dll前的;,linux下要把mysqli编译进去。
一:Mysqli.dll是一个允许以对象的方式或者过程操作数据库的,它的使用方式也很容易。这里就几个常
mysql_connect($db_host,&$db_user,&$db_password);
mysql_select_db($dn_name);
= mysql_query(&SELECT
`name` FROM `users` WHERE `location` = '$location'&);
= mysql_fetch_array($result,
MYSQL_ASSOC))
$row['name'];
mysql_free_result($result);
其实背后有些学问… 这种方式不能 Bind Column ,以前例的 SQL 叙述来说,$location 的地方容易被 SQL Injection。后来于是发展出了 mysql_escape_string() (备注:5.3.0之后弃用) 以及 mysql_real_escape_string()来解决这个问题,不过这麽一搞,整个叙述会变得複杂且丑陋,而且如果栏位多了,可以想见会是怎样的情形…
= sprintf(&SELECT
* FROM users WHERE user='%s' AND password='%s'&,
mysql_real_escape_string($user),
mysql_real_escape_string($password));
mysql_query($query);
在 PHP-MySQLi 中有了不少进步,除了透过 Bind Column 来解决上述问题,而且也多援 Transaction, Multi Query ,
并且同时提供了 Object oriented style (下面这段 PHP-MySQLi 范例的写法) 和 Procedural style
mysqli($db_host,&$db_user,&$db_password,&$db_name);
INTO `users` (id, name, gender, location) VALUES (?, ?, ?, ?)&;
=&$mysqli-&prepare($sql);
$stmt-&bind_param('dsss',&$source_id,&$source_name,&$source_gender,&$source_location);
$stmt-&execute();
$stmt-&bind_result($id,&$name,&$gender,&$location);
($stmt-&fetch())
.&$location;
$stmt-&close();
$mysqli-&close();
但看到这边又发现了一些缺点,例如得 Bind Result,这个就有点多馀,不过这其实无关紧要,因为最大的问题还是在于这不是一个抽象(Abstraction)的方法,所以当后端更换资料库的时候,就是痛苦的开始… 于是 PDO 就出现了
2.PDO与mysql
PDO是PHP5.1之后才支持的,他为访问数据库采用了一致性的接口。但是国内众多的开源程序都是
使用MySQL的extension所提供的function连接数据库,进行查询。PDO功能强大为何国内成熟的PHP系统都不使用呢?
问过几个朋友为啥用PDO,答案是“快”,PDO连接数据库会快么?为什么使用PDO?他们两种方式有什么区别?首先还是比较关心的性能问题.写了1个脚本测试向MySQL插入100万条数据。
= mysql_connect(&localhost&,&&root&,&&root&)&or
die('mysql
connect error');
=&&mysql:host=127.0.0.1;dbname=performace_test&;
PDO($dsn,&'root',&'root',&array(PDO::ATTR_PERSISTENT
=& true));
mysql_query('TRUNCATE
TABLE `performace_test`.`myquery`',$link);&&
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_4.jpg’,’1′,’0′,’0′,NULL,NULL,NULL,’0′,’2980.00′,’0.00′,’1.250000′,’1′,’′,’0′,’′,’3026412.jpg’)&;
$start_time
= microtime(true);
for($i=0;$i&$num;$i++)
mysql_query($query,$link);
&USE MySQL extension: &.
(microtime(true)-$start_time);
mysql_query(‘TRUNCATE
TABLE `performace_test`.`myquery`’,$link);&&
$start_time
= microtime(true);
for($i=0;$i&$num;$i++)
$db-&exec($query);
&\r\nUSE PDO : &.
(microtime(true)-$start_time);
USE MySQL extension: 95.s
USE PDO : 99.s
在链接MySQL上几乎没有区别。PDO的性能损失完全可以忽略不计。
但是却有非常多的操作却是MySQL扩展库所不具备的:
1:PDO真正的以底层实现的统一接口数库操作接口
2:PDO支持更高级的DB特性操作,如:存储过程的调度等,mysql原生库是不支持的.
3:PDO是PHP官方的PECL库,兼容性稳定性必然要高于MySQL Extension,可以直接使用 pecl upgrade pdo 命令升级.
PHP6默认也是使用PDO进行数据库链接,MySQL Extension会作为辅助。所以我们在日常项目中,如果环境允许,尽可能去使用PDO来进行MySQL数据库操作。
本文已收录于以下专栏:
相关文章推荐
工作中需要操作sqlserver、oracle都是使用的这个类,当时是在别人的基础上改进了,现在分享下
Config = $confi
$host=&127.0.0.1&;
$userName=&root&;
$password=&&;
$dbName=&db_database25&;
$connID=mysqli_co...
本文并非直译
用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢?
这篇文章将会介绍这两种方式的不同点,数据库的支持、稳定性、性能等问题。
名词解释:最开始的初学者,往往搞不清mysqli,mysqlnd,pdo到底是什么,下面先直接贴出最直观的名字吧。
MYSQL:This extension is deprecated as of...
mysqli 打开与php版本有关,尤其是php7以后不支持mysqli链接,只有pdo方式
$DB_HOST=&localhost&;
$DB_NAME=&hello&;
$DB_USER=&r...
一、php手册关于mysql的说明:     
This extension is not recommended for writing new code. Instead, either th...
PHP操作将提交表单内容写入数据库
最近在linux装了新的环境,php5.6+mysql5.5+nginx。然后用原来的mysql链接数据库出现的错误。
原因就是说连接数据库的方法太旧。建议我用mysqli和PDO来链接数据库。
PHP-MySQL 是 PHP 操作 MySQL 資料庫最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相對進階的功能,就 Extension 而言...
转载自:/qj_l12@126/blog/static//
   代表一个PHP和数据库之...
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
富足长乐, 积分 5288, 距离下一级还需 2712 积分
论坛徽章:0
本帖最后由 a.a 于
11:40 编辑
& &文章地址:
& &文章通过适用数据库、安全、性能、named parameter 支持对pdo 和mysql两个接口进行了评估哪个接口更加适合开发者。
& &不管是pdo还是mysqli,作者强调在执行sql的使用prepare方法,有利于数据库的防注入。
& &有兴趣的朋友可以看看。
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
小富即安, 积分 3309, 距离下一级还需 1691 积分
论坛徽章:13
pdo更像DBI,并且以后如果改换其他的数据库,改动的代码少很多,只需要换dsn就行了
腰缠万贯, 积分 8910, 距离下一级还需 1090 积分
论坛徽章:0
肯定的新的替代旧的啊
pdo是趋势。
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处PHP的数据库扩展之MySQL,mysqli和PDO - 简书
PHP的数据库扩展之MySQL,mysqli和PDO
什么叫做"扩展"?
在PHP中你会发现有很多其他的扩展. PHP代码是由一个核心和一些可选扩展组成了核心功能. PHP的MySQL相关扩展, 比如mysqli,mysql都是基于PHP扩展框架实现的.扩展的一个典型的作用就是暴露一个API给PHP程序员, 允许扩展自己的功能可以被程序员使用.PHP中提供的用于MySQL的主要API是什么?当考虑连接到MySQL数据库服务器的时候,有三种主要的API可供选择:
PHP的MySQL扩展
PHP的mysqli扩展
PHP数据对象(PDO)
三者都有各自的优缺点。下面的讨论就是为了对每种API的关键方面给出一个简短的介绍。
什么是PHP的MySQL扩展? 这是设计开发允许PHP应用与MySQL数据库交互的早期扩展. mysql扩展提供了一个面向过程的接口, 并且是针对MySQL4.1.3或更早版本设计的. 因此, 这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端 进行交互, 但并不支持后期MySQL服务端提供的一些特性.
如果你是使用MySQL4.1.3或更新的服务端版本, 强烈建议你使用mysqli扩展替代它.
对于mysql扩展的更多信息,请参阅。
什么是PHP的mysqli扩展? mysqli扩展, 我们有时称之为MySQL增强扩展, 可以用于使用 MySQL4.1.3或更新版本中新的高级特性. mysqli扩展在PHP 5及以后版本中包含. mysqli扩展有一系列的优势, 相对于mysql扩展的提升主要有:
面向对象接口
prepared语句支持(译注:关于prepare请参阅mysql相关文档)
多语句执行支持
增强的调试能力
嵌入式服务支持Note:
如果你使用MySQL4.1.3或更新版本, 强烈建议你使用这个扩展.
在提供了面向对象接口的同时也提供了一个面向过程的接口.
对于mysqli扩展的更多信息,请参阅。
什么是PDO? PHP数据对象, 是PHP应用中的一个数据库抽象层规范. PDO提供了一个统一的API接口, 可以使得你的PHP应用不去关心具体要连接的数据库服务器系统类型. 也就是说, 如果你使用PDO的API, 可以在任何需要的时候无缝切换数据库服务器, 比如从Firebird 到MySQL, 仅仅需要修改很少的PHP代码. 其他数据库抽象层的例子包括Java应用中的JDBC以及Perl中的DBI。 当然, PDO也有它自己的先进性, 比如一个干净的, 简单的, 可移植的API, 它最主要的缺点是会限制让你不能使用后期MySQL服务端提供所有的数据库高级特性. 比如, PDO不允许使用MySQL支持的多语句执行. PDO的更多信息,请参阅。
iOS开发学习中mysqli、pdo_mysql和mysql之间的区别以及选择 - CSDN博客
mysqli、pdo_mysql和mysql之间的区别以及选择
这里对在PHP应用开发过程中需要和Mysql数据库交互时可用的选择进行一个简单介绍。
什么是API?
一个应用程序接口(Application Programming Interface的缩写),定义了类,方法,函数,变量等等一切 你的应用程序中为了完成特定任务而需要调用的内容。在PHP应用程序需要和数据库进行交互的时候所需要的API 通常是通过PHP扩展暴露出来(给终端PHP程序员调用)。
API可以是面向过程的,也可以是面向对象的。对于面向过程的API,我们通过调用函数来完成任务,而对于面向对象的API, 我们实例化类,并在实例化后得到的对象上调用方法。对于这两种接口而言,后者通常是首选的,因为它更加现代化,并且 给我们带来了良好的代码结构。
当构建一个需要连接到MySQL服务端的PHP应用的时候,有好几种API可供选择。此文档就是讨论这些可用的API并讨论如何为 你的应用选择一个最佳的解决方案。
什么是连接器?
在MySQL文档中,术语connector解释为“一段允许你的应用连接到MySQL数据库服务器的软件代码”。 MySQL提供了很多语言的连接器,其中包括PHP的。
在你的PHP应用需要和一个数据库服务器交互的时候,你需要书写PHP代码去完成“连接数据库服务器”,“查询数据库“以及其他数据库相关功能 等一系列活动。你的PHP应用将会使用提供这些API的软件,或者在需要的时候使用一些中间库,来处理你的应用和数据库服务器之间的交互。 这种软件通常被认为是连接器,它允许你的引用连接到数据库服务器。
什么是驱动?
驱动是一段设计用来于一种特定类型的数据库服务器进行交互的软件代码。驱动可能会调用一些库,比如MySQL客户端库或者MySQL Native驱动库。 这些库实现了用于和MySQL数据库服务器进行交互的底层协议。
通过一个例子数据库抽象层可以 使用多种特定数据库的驱动。其中一种驱动就是PDO MYSQL驱动,它就是与MySQL服务器之间的接口。
有时大家会不加区分的使用连接器和驱动这两个术语。在MySQL相关文档中&driver&术语被作为一个连接器包 中提供特定数据库部分的软件代码。
什么是扩展?
在PHP文档中你还会发现很多其他的扩展。PHP代码是由一个核心,一些可选扩展组成了核心功能。PHP 的MySQL相关扩展,比如mysqli,mysql都是基于PHP扩展框架实现的。
扩展一个典型的作用就是暴露一个API给PHP程序员,允许扩展自己的功能可以被程序员使用。当然,也有一部分基于PHP扩展框架 开发的扩展不会给PHP程序员暴露API接口。
比如说PDO MySQL驱动扩展,就没有向PHP程序员暴露API接口,但是向它上层的PDO层提供了一个接口。
术语API和扩展描述的不是同一类事物,因为扩展可能并不需要暴露一个API接口给程序员。
PHP中提供的用于MySQL的主要API是什么?
当考虑连接到MySQL数据库服务器的时候,有三种主要的API可供选择:
PHP的MySQL扩展
PHP的mysqli扩展
PHP数据对象(PDO)
三者都有各自的优缺点。下面的讨论就是为了对每种API的关键方面给出一个简短的介绍。
什么是PHP的MySQL扩展?
这是设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程 的接口,并且是针对MySQL4.1.3或更早版本设计的。因此,这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性。
如果你是使用MySQL4.1.3或更新的服务端版本,强烈建议你使用mysqli&扩展替代它。
mysql扩展的源代码在PHP扩展目录ext/mysql下。
对于mysql扩展的更多信息,请参阅。
什么是PHP的mysqli扩展?
mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。mysqli扩展在PHP 5及以后版本中包含。
mysqli扩展有一系列的优势,相对于mysql扩展的提升主要有:
面向对象接口
prepared语句支持(译注:关于prepare请参阅mysql相关文档)
多语句执行支持
增强的调试能力
嵌入式服务支持
如果你使用MySQL4.1.3或更新版本,强烈建议你使用这个扩展。
在提供了面向对象接口的同时也提供了一个面向过程的接口。
mysqli扩展是使用PHP扩展框架构建的,它的源代码在PHP源码目录下的ext/mysqli中。
对于mysqli扩展的更多信息,请参阅。
什么是PDO?
PHP数据对象,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要 连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从Firebird 到MySQL,仅仅需要修改很少的PHP代码。
其他数据库抽象层的例子包括Java应用中的JDBC以及Perl中的DBI。
当然,PDO也有它自己的先进性,比如一个干净的,简单的,可移植的API,它最主要的缺点是会限制让你不能使用 后期MySQL服务端提供所有的数据库高级特性。比如,PDO不允许使用MySQL支持的多语句执行。
PDO是基于PHP扩展框架实现的,它的源码在PHP源码目录的ext/pdo下。
PDO的更多信息,请参阅。
什么是PDO的MySQL驱动器?
PDO的MySQL驱动并不是一套API,至少从PHP程序员的角度来看是这样的。实际上,PDO的MySQL驱动处于PDO自己的下层, 提供了特定的Mysql功能。程序员直接调用PDO的API,而PDO使用了PDO的MySQL驱动完成与MySQL服务器端的交互。
PDO的MySQL驱动是众多PDO驱动中的一个。其他可用的PDO驱动包括Firebird,PostgreSQL等等。
PDO的MySQL驱动是基于PHP扩展框架实现的。它的源码在PHP源码目录下的ext/pdo_mysql。 它没有向PHP程序员暴露API。
PDO的MySQL扩展的更多信息请参阅。
什么是PHP的MySQL Native 驱动?
为了与MySQL数据库服务端进行交互,mysql扩展,mysqli扩展, PDO MySQL驱动都使用了实现了必要的协议的底层库。以前,可用的库只有MySQL客户端库和libmysql。
然而,libmysql包含的接口没有针对与PHP的应用交互进行优化,libmysql&是早期为C应用程序设计的。基于这个原因,MySQL Native驱动mysqlnd,作为libmysql的一个 针对PHP应用的修改版本被开发。
mysql,mysqli以及PDO Mysql驱动都可以各自配置使用&libmysql或者mysqlnd。mysqlnd作为一个专门设计 用于PHP系统的库,它在内存和速度上都比libmysql有很大提升。非常希望你去尝试这些提升。
MySQL Native驱动仅仅可以在MySQL服务端版本为4.1.3及以后版本才可以使用。
MySQL Native驱动是基于PHP扩展框架实现的。源代码位于PHP源码目录的ext/mysqlnd下。 它没有向PHP程序员暴露接口。
下表比较了PHP中三种主要的MySQL连接方式的功能:
简单来说就是 : &mysqli(首选) pdo_mysql(建议) mysql(不建议)
原文链接 &http://php.net/manual/zh/mysqli.overview.php
本文已收录于以下专栏:
相关文章推荐
一、PHP手册关于MySQL的说明:     
This extension is not recommended for writing new code. Instead, either t...
一、php手册关于mysql的说明:     
This extension is not recommended for writing new code. Instead, either th...
平时总是用封装的写法写sql,最基本的数据库连接都快忘了怎么写了。现在回头总结一下PHP连接数据库的一些方法和区别:
MySQL 是 PHP 操作 MySQL 数据库最原始的 Extension...
一、php手册关于mysql的说明:     
This extension is not recommended for writing new code. Instead, either the...
一、php手册关于mysql的说明:     
This extension is not recommended for writing new code. Instead, either the...
首先安装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 而言...
本文并非直译
用Php访问数据的时候,你选择MySQLi和PDO,在选择之前,你应该知道些什么呢?
这篇文章将会介绍这两种方式的不同点,数据库的支持、稳定性、性能等问题。
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 vs选择默认环境设置 的文章

 

随机推荐