PHP中mysql与mysqli区别.doc
文本预览下载声明
一:PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能,就 Extension 而言,本身也增加了安全性。而 PDO (PHP Data Object) 则是提供了一个 Abs HYPERLINK /command/tr.html \t _blank traction Layer 来操作资料库,用讲的其实看不出来有有什麽差别,所以就直接看程式吧…首先,先来看一段用 PHP-MySQL 写成的程式码,这类的范例常用在世界各地:代码如下:?phpmysql_connect($db_host, $db_user, $db_password);mysql_select_db($dn_name);$re HYPERLINK /command/su.html \t _blank sult = mysql_query(SELECT `name` FROM `users` WHERE `lo HYPERLINK /command/cat.html \t _blank cation` = $location);while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){echo $row[name];}mysql_ HYPERLINK /command/free.html \t _blank free_result($result);?乍看之下没什麽问题,但其实背后有些学问…这种方式不能 Bind Column ,以前例的 SQL 叙述来说,$location 的地方容易被 SQL Injection。后来于是发展出了 mysql_escape_string() (备注:5.3.0之后弃用) 以及 mysql_real_escape_string() 来解决这个问题,不过这麽一搞,整个叙述会变得}杂且丑陋,而且如果栏位多了,可以想见会是怎样的情形…代码如下:?php$query = 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 范例的写法) 和 Proce HYPERLINK /command/du.html \t _blank dural style (上面 PHP-MySQL 范例的写法)两种写法…等等。代码如下:?php$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);$sql = INSERT INTO `users` ( HYPERLINK /command/id.html \t _blank id, name, gender, location) VALUES (?, ?, ?, ?);$stmt = $mysqli-prepare($sql);$stmt-bind_param(dsss, $source_id, $source_name, $source_gender, $source_location);$stmt- HYPERLINK /command/ex.html \t _blank exe HYPERLINK /command/cut.html \t _blank cute();$stmt-bind_result($id, $name, $gender, $location);while ($stmt-fetch()){echo $id . $name . $gender . $location;}$stmt-close();$mysqli-close();?但看到这边又发现了一些缺点,例如得 Bind Result,这个就有点多余,不过这其实无关紧要,因为最大的问题还是在于这不是一个抽象(Abstraction)的方法,所以当后端更换资料库的时候,就是痛苦的开始…于是 PDO 就出现了(备注:目前 Ubuntu 和 Debian 来说,PDO 并没有直接的套件可以安装,而是必须透过 PECL
显示全部