当前位置 : 李杰的流水账 > 技术 > linux

php里mysql、mysqli 与 pdo详解

自己在写脚本的时候偶尔会用mysql,偶尔会用mysqli,有时候用mysql不能够执行成功,然后傻乎乎得又改成mysqli,也没有深究过之间的 区别,今天看stackoverflow无意浏览到了mysql与mysqli的区别的问题,于是深入学习了一下。使用百度的话是出不来 stackoverflow的答案的,究竟是stackoverflow不让收录还是百度不显示。。。咱就不深究了。百度出来的第一个结果是潘少宁的博客

首先两个函数都是用来处理DB 的。 首先, mysqli 连接是永久连接,而mysql是非永久连接。什么意思呢? mysql连接每当第二次使用的时候,都会重新打开一个新的进程,而mysqli则只使用同一个进程,这样可以很大程度的减轻服务器端压力。 其次,mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。具体查看 http://cn.php.net/mysqli 应用比较多的地方是 mysqli的事务。 比如下面的示例:
$mysqli = new mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//开始事物
$mysqli->query($sql1);
$mysqli->query($sql2);
if(!$mysqli->errno){
  $mysqli->commit();
  echo 'ok';
}else{
 echo 'err';
  $mysqli->rollback();
}

看过之后只知道mysqli与mysql一个永久连接,一个是非永久连接。继续扒拉了一下第一页的结果,都差不多只提到了这么一个区别。
用谷歌试一试,好多stackoverflow上的问答,其中的答案很不错:
There are (more than) three popular ways to use MySQL from PHP. (有3个主流php mysql接口
  1. The mysql functions are procedural and use manual escaping.(mysql函数是过程化的,需要手动断连?这个escaping不知道该怎么翻译为好
  2. mysqli is a replacement for the mysql functions, with object-oriented and procedural versions. It has support for prepared statements.(mysqli是mysql函数的一个替代品,是面向对象的,过程可视化,支持写好的语句。
  3. PDO (PHP Data Objects) is a general database abstraction layer with support for MySQL among many other databases. It provides prepared statements, and significant flexibility in how data is returned.(PDO ,php数据对象,是一个通用的数据库抽象层,支持mysql与很多其他数据库混用,它支持写好的语句并且能够灵活显示返回的数据。
I would recommend using PDO with prepared statements. It is a well-designed API and will let you more easily move to another database (including any that supports ODBC) if necessary.(回答者推荐使用PDO,因为他是个设计优良的API,需要的话,你能够非常容易得迁移到其他数据库(包括任何支持ODBC的数据库)上去。) Use MySQLi over the older MySQL functions. The "i" stands for "improved". The list of improvements can be found in the docs(用mysqli而不是老掉牙的mysql函数,多出来的”i"代表"improved"(改进版),相应的改进点可以在文档中找到。) Here’s an interesting article showing benchmarks between the various libraries used to query MySQL databases. It looks like the mysql and mysqli libraries work much faster than PDO.
Extension Req/Sec
mysqli
164
mysql
162
PDO
88
mysqli (prepared)
86
PDO (prepared)
81

内容列表