php mysqli和mysql区别详解
本文介绍下,php中有关mysqli与mysql类的一些区别,有需要的朋友,可以作个参考哦。
一,PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能。 PDO (PHP Data Object) 则是提供了一个 Abstraction Layer 来操作资料库。 例子: 这种方式不能 Bind Column ,以前例的 SQL 叙述来说,$location 的地方容易被 SQL Injection。后来于是发展出了 mysql_escape_string() (备注:5.3.0之后弃用) 以及 mysql_real_escape_string()解决此问题。 例子: 在 PHP-MySQLi 中有了不少进步,除了透过 Bind Column 来解决上述问题,而且也多援 Transaction, Multi Query ,并且同时提供了 Object oriented style (下面这段 PHP-MySQLi 范 例的写法) 和 Procedural style (上面 PHP-MySQL 范例的写法)两种写法等。 例子: prepare($sql); $stmt->bind_param('dsss', $source_id, $source_name, $source_gender, $source_location); $stmt->execute(); $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 安装)。 例子: roga@carlisten-lx:~$ pecl search pdo Package Stable/(Latest) Local PDO 1.0.3 (stable) PHP Data Objects Interface. PDO_4D 0.3 (beta) PDO driver for 4D-SQL database PDO_DBLIB 1.0 (stable) FreeTDS/Sybase/MSSQL driver for PDO PDO_FIREBIRD 0.2 (beta) Firebird/InterBase 6 driver for PDO PDO_IBM 1.3.2 (stable) PDO driver for IBM databases PDO_INFORMIX 1.2.6 (stable) PDO driver for IBM Informix INFORMIX databases PDO_MYSQL 1.0.2 (stable) MySQL driver for PDO PDO_OCI 1.0 (stable) Oracle Call Interface driver for PDO PDO_ODBC 1.0.1 (stable) ODBC v3 Interface driver for PDO PDO_PGSQL 1.0.2 (stable) PostgreSQL driver for PDO PDO_SQLITE 1.0.1 (stable) SQLite v3 Interface driver for PDO pdo_user 0.3.0 (beta) Userspace driver for PDO当透过 PECL 安装装好后,就可以透过以下方式来操作资料库: prepare($sql); $sth->execute(array($location, $name)); $result = $sth->fetch(PDO::FETCH_OBJ); echo $result->name . $result->location; $dbh = NULL; ?> pdo的好处: 1,PDO 连接资料库时透过 Connection String 来决定连接何种资料库。 2,PDO 可以透过 PDO::setAttribute 来决定连线时的设定,像是 Persistent Connection, 回传错误的方式(Exception, E_WARNING, NULL)。甚至是回传栏位名称的大小写…等等。 2,PDO 支援 Bind Column 的功能,除了基本的 Prepare, Execute 以外,也可以 Bind 单一栏位,并且指定栏位型态。 4,PDO 是 Abstraction Layer 所以就算更换储存媒介,需要花的功夫比起来是最少的。 个人比较喜欢使用DBI 来连接资料库,像是 ActiveRecord 以及 Propel ORM(Object-Relational Mapping)。 例如,以 ActiveRecord 为例,如果要实现这样的 SQL 叙述… INSERT INTO `users` (id, name, gender, location) VALUES(1, 'roga', 'male', 'tpe') pdo的操作方式: prepare($sql); $sth->execute(array(1, 'roga', 'male', 'tpe')); ?> 以ActiveRecord 来说的话,则是: id = 1; $user->name = 'roga'; $user->gender = 'male'; $user->location = 'tpe'; $user->save(); ?> 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是一个允许以对象的方式或者过程操作数据库的,它的使用方式也很容易。 几个常见的操作和 mysql.dll做一个对比。 1,
|
上一篇: php float不四舍五入截取浮点型字符串的方法
下一篇: 解决jquery中文乱码问题的方法