当前位置:   article > 正文

php中使用mysql、mysqli、pdo的比较

php mysql pdo 哪个好

        普通的mysql方法在安全性方面应该不是很好,每次需要考虑sql注入的问题,而且速度不是很赞。而mysqli是在mysql基础上进行改进的一次,较好的解决了sql注入问题。

        pdo则是最新的数据库抽象方法,pdo高度抽象了数据库操作,项目使用pdo方法可以方便的进行迁移,在不同的数据库之间进行迁移。

        在高负载的情况下.PDO开启长连接能够得到一个相对稳定的负载“值”。但是效率却不是最高的。
mysql最快。mysqli其次。只是mysql和mysqli在高并发、系统高负载的时候。其所承担的负载也是很可观的。PDO则不会。


书写风格面向对象抛异常
php_mysqli  函数名用下划线,比如fetch_all 可以oop,也可以opp否,只能false
pdo函数名用驼峰,比如fetchAlloop可以throw,也可false或false加warnnig
php_pgsql函数名用下划线,比如pg_fetch_allopp否,只能false

其次pdo是面向对象的,当有错误的时候可以抛出异常,而且可以自定义异常抛出。


php_mysqli 与 pdo 性能对比:(查找自互联网)

 PHP的mysqli扩展PDO (使用PDO MySQL驱动和MySQL Native驱动)PHP的mysql扩展
引入的PHP版本5.05.03.0之前
PHP5.x是否包含
MySQL开发状态活跃在PHP5.3中活跃仅维护
在MySQL新项目中的建议使用程度建议 - 首选建议不建议
API的字符集支持
服务端prepare语句的支持情况
客户端prepare语句的支持情况
存储过程支持情况
多语句执行支持情况大多数
是否支持所有MySQL4.1以上功能大多数

PDO使用说明:

PDO::prepare()

官方文档:http://www.php.net/manual/zh/pdo.prepare.php

适用:多次查询使用相同的条件字段和结果字段。这时候比PDO::query()性能高。

转义:value无需手动转义,PDO会自动进行转义,不用担心SQL注入。(开启query log可以看到语句的确已转义)

缺点:由于标识符(列名表名)是手写的SQL,要自己加引用符反勾号`。

PDO::prepare()模拟处理的时候不会通过数据库,所以不知道语法错误,不会返回错误或抛异常。什么时候是真处理,什么时候是模拟处理, 官方手册中未找到说明。输入任意的SQL都不出错……所以目前不要指望prepare返回错误,PDOStatement::execute()时才会返 回错误。http://www.php.net/manual/zh/pdo.prepare.php

 补充:这里给出mysql、mysqli、pdo的基本用法

  1. <?php
  2. //mysql方法
  3.     $dbname='db_pet';
  4.     $username='root';
  5.     $password='playboy';
  6.     mysql_connect('localhost',$username,$password);
  7.     mysql_select_db($dbname);
  8.     $res=mysql_query('select password from user where username="home"');
  9.     $row=mysql_fetch_row($res);
  10.     echo $row[0] ;
  11. echo '<hr/>';
  12. //mysqli方法
  13.     $con=new MySQLi('localhost',$username,$password,$dbname);
  14.     $res2=$con->query('select email from user where username ="home"');
  15.     $row2=$res2->fetch_array();
  16.     echo $row2[0];
  17.     
  18. echo '<hr/>';
  19. //pdo方法
  20.     try{
  21.         $pdo=new PDO('mysql:host=localhost;dbname=db_pet','root','playboy');
  22.         $sql='select email from user where username=?';
  23.         $stmt=$pdo->prepare($sql);
  24.         $stmt->execute(array('home'));
  25.         echo $stmt->rowCount();
  26.     }catch(PDOException $e){
  27.         echo $e->getMessage();
  28.     }    
  29. ?>


 



 


转载于:https://www.cnblogs.com/hcxl/p/8321598.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/859260
推荐阅读
相关标签
  

闽ICP备14008679号