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连接:

1 <?php2

3 $conn

4 = @ mysql_connect("localhost", "root", "") or5 die("数据库连接错误");6

7 mysql_select_db("bbs", $conn);8

9 mysql_query("set names 'utf8'");10

11 echo "数据库连接成功";12

13 ?>

Mysqli连接:

1 <?php2

3 $conn = mysqli_connect('localhost', 'root', '', 'bbs');4

5 if(!$conn){6

7 die("数据库连接错误" . mysqli_connect_error());8

9 }else{10

11 echo"数据库连接成功";12 }13 ?>

Pdo连接:

1 <?php2

3 try{4

5 $pdo=new

6 pdo("mysql:host=localhost;dbname=bbs","root","");7

8 }catch(PDDException $e){9

10 echo"数据库连接错误";11

12 }13

14 echo"数据库连接成功";15

16

17 ?>

以下是 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是一个允许以对象的方式或者过程操作数据库的,它的使用方式也很容易.

1 <?php2

3 mysql_connect($db_host, $db_user, $db_password);4

5 mysql_select_db($dn_name);6

7 $result = mysql_query("SELECT `name` FROM `users` WHERE `location` = '$location'");8

9 while($row = mysql_fetch_array($result,MYSQL_ASSOC)){10

11 echo

12 $row['name'];13

14 }15 mysql_free_result($result);16

17 ?>

其实背后有些学问… 这种方式不能 Bind Column ,以前例的 SQL 叙述来说,$location 的地方容易被 SQL Injection。后来于是发展出了 mysql_escape_string() (备注:5.3.0之后弃用) 以及 mysql_real_escape_string()来解决这个问题,不过这麽一搞,整个叙述会变得複杂且丑陋,而且如果栏位多了,可以想见会是怎样的情形…

1 <?php2

3 $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",

4

5 mysql_real_escape_string($user),

6

7 mysql_real_escape_string($password));8

9 mysql_query($query);10

11 ?>

在 PHP-MySQLi 中有了不少进步,除了透过 Bind Column 来解决上述问题,而且也多援 Transaction, Multi Query ,

并且同时提供了 Object oriented style (下面这段 PHP-MySQLi 范例的写法) 和 Procedural style

1 <?php2

3 $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);4

5 $sql = "INSERT INTO `users` (id, name, gender, location) VALUES (?, ?, ?, ?)";6

7 $stmt = $mysqli->prepare($sql);8

9 $stmt->bind_param('dsss', $source_id, $source_name, $source_gender, $source_location);10

11 $stmt->execute();12

13 $stmt->bind_result($id, $name, $gender, $location);14

15 while ($stmt->fetch()) {16

17 echo $id . $name . $gender . $location;18

19 }20

21 $stmt->close();22

23 $mysqli->close();24

25 ?>

但看到这边又发现了一些缺点,例如得 Bind Result,这个就有点多馀,不过这其实无关紧要,因为最大的问题还是在于这不是一个抽象(Abstraction)的方法,所以当后端更换资料库的时候,就是痛苦的开始… 于是 PDO 就出现了

2.PDO与mysql

PDO是PHP5.1之后才支持的,他为访问数据库采用了一致性的接口。但是国内众多的开源程序都是

使用MySQL的extension所提供的function连接数据库,进行查询。PDO功能强大为何国内成熟的PHP系统都不使用呢?

问过几个朋友为啥用PDO,答案是“快”,PDO连接数据库会快么?为什么使用PDO?他们两种方式有什么区别?首先还是比较关心的性能问题.写了1个脚本测试向MySQL插入100万条数据。

1 <?php2

3 $link = mysql_connect("localhost", "root", "root") or die('mysql connect error');4

5 $num = 100000;6

7 $dsn = "mysql:host=127.0.0.1;dbname=performace_test";8

9 $db = new PDO($dsn, 'root', 'root', rray(PDO::ATTR_PERSISTENT => true));10

11 mysql_query('TRUNCATE TABLE `performace_test`.`myquery`',$link); //Truncate Table

12

13 $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’)";14

15 $start_time = microtime(true);16

17 for($i=0;$i

19 mysql_query($query,$link);20

21 }22

23 echo "USE MySQL extension: ". (microtime(true)-$start_time);24

25 mysql_query(‘TRUNCATE TABLE `performace_test`.`myquery`’,$link); //Truncate Table

26

27 $start_time = microtime(true);28

29 for($i=0;$i

31 $db->exec($query);32

33 }34

35 echo "\r\nUSE PDO : ". (microtime(true)-$start_time);36

37 ?>

USE MySQL extension: 95.233189106s

USE 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数据库操作.

mysqli mysql pdo_PHP中MySQL、MySQLi和PDO的用法和区别相关推荐

  1. PHP中MySQL、MySQLi和PDO的用法和区别

    MySQL 是 PHP 操作 MySQL 数据库最原始的 Extension.MySQLi 的 i 代表 Improvement ,提供了相对进阶的功能,就 Extension 而言,本身也增加了安全 ...

  2. pdo mysql 和 mysqli_PHP中MySQL、MySQLi和PDO的用法和区别

    设计开发允许PHP应用与MySQL数据库交互的早期扩展.mysql扩展提供了一个面向过程的接口: 并且是针对MySQL4.1.3或更早版本设计的.因此,这个扩展虽然可以与MySQL4.1.3或更新的数 ...

  3. node mysql limit_node中mysql连接池的connectionLimit指什么,它和mysql的最小连接数和最大连接数的关系是什么?...

    问题1:node中mysql连接池的connectionLimit指什么,它和mysql的最小连接数和最大连接数的关系是什么 问题2:mysql max_connections是什么,max_used ...

  4. mysql.createpool_Node.js MySQL模块中mysql.createConnection和mysql.createPool有什么区别?

    我试图了解它们之间的区别 mysql.createConnection var mysql = require('mysql'); var connection = mysql.createConne ...

  5. extmail如何登陆mysql_rhel5.4下postfix+mysql+extmail中mysql密码怎么设置?

    我在配置postfix+mysql+extmail中出现了一下问题 首先我安装的是mysql,mysql-server,mysql-devel,phpadmin 其中Postfix不支持mysql是要 ...

  6. mysql 1593_Linux中MySQL主从复制中出现1593错误码的低级错误

    主从复制小编介绍过不少的文章了,但在使用过程中经常会有一些问题出现了,今天我们来看关于Linux中MySQL主从复制中出现1593错误码的低级错误问题解决办法. 今天测试shell脚本自动配置MySQ ...

  7. mysql compact_在 MySQL InnoDB 中,COMPRESSED, COMPACT 和DYNAMIC 有什么区别?

    In MySQL InnoDB, what is the difference between COMPRESSED, COMPACT and DYNAMIC for ROW_FORMAT? What ...

  8. Linux里命令卸载mysql,linux中mysql完整卸载命令操作

    yum方式安装的mysql 1.yum remove mysql mysql-server mysql-libs compat-mysql51 2.rm -rf /var/lib/mysql 3.rm ...

  9. mysql_unbuffered_query pdo_php中mysql操作的buffer知识

    php与mysql的连接有三种方式,mysql,mysqli,pdo.不管使用哪种方式进行连接,都有使用buffer和不使用buffer的区别. 什么叫使用buffer和不使用buffer呢? 客户端 ...

最新文章

  1. ROS系统 launch启动文件的使用方法
  2. 近期重构技能的一些心得
  3. Deep Learning菜鸡篇,我的第一个深度神经网络
  4. CompletableFuture详解~thenApplyAsync
  5. 3三星闪存刷梅林_三星电子副会长李在镕造访西安
  6. JupyterHub on Kubernetes-Helm安装
  7. 微软发布全新3D Emoji表情系统:与Win11的UI风格一致
  8. 解决IE9下JQuery的ajax失效的问题
  9. Leetcode376.摆动序列
  10. l4d2服务器修改武器伤害,辐射4武器伤害及护甲修改攻略
  11. ActiveMQ消息队列
  12. 数据结构_十字链表(C语言)
  13. 图像分割——超像素(Superpixels)分割(Matlab)
  14. java中412是什么错_HTTP 412 错误 – 先决条件失败 (Precondition
  15. java输入输出操作c盘文件拒绝访问问题
  16. 脱粉之后,华为的喜忧参半
  17. CCF认证-201812-2-小明放学(C语言实现)
  18. 【OS学习笔记】二十五 保护模式七:任务和特权级保护对应的汇编源代码
  19. 二十几岁的女孩应该有这几点思想
  20. 《我是一只IT小小鸟》读书笔记(2)

热门文章

  1. mysql update inner join_mysql update inner join错误
  2. 利用tsne将不同句子关于相似度可视化出来
  3. access如何去重_如何在 1 秒内做到大数据精准去重?
  4. 如何为云平台打造高性能CC防火墙
  5. Win7系统中添加局域网中别人共享的打印机 出错, 找不到驱动程序 的问题的解决...
  6. linux 软路由 中文,Linux 软路由性能测试及分析-Go语言中文社区
  7. 超级时间整理术-读书笔记
  8. C++的沉迷与爱恋 from 侯捷
  9. java 方法 多参数_需要在Java方法中传递多个(20+)参数。这样做有效吗?
  10. 三星s10miracast在哪里_如何使用Miracast将手机屏幕投影到电视上?