文档详情

PHP中mysql与mysqli区别.doc

发布:2017-08-07约7.99千字共5页下载文档
文本预览下载声明
一: 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 写成的程式码,这类的范例常用在世界各地: 代码如下: ?php mysql_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
显示全部
相似文档