深入详解mysql与mysqli的不同之处
发布时间:2022-07-05 16:05:00 所属栏目:PHP教程 来源:互联网
导读:php中mysql与mysqli对于数据库的连接操作是有所区别的,从最基于的区别来看是ysqli 连接是永久连接,而mysql是非永久连接了,下面我们来深入的分析它们两的区别. 具体查看 http://cn.php.net/mysqli 在实际使用中,较多使用到mysqli的事务. PHP代码示例如下: $my
php中mysql与mysqli对于数据库的连接操作是有所区别的,从最基于的区别来看是ysqli 连接是永久连接,而mysql是非永久连接了,下面我们来深入的分析它们两的区别. 具体查看 http://cn.php.net/mysqli 在实际使用中,较多使用到mysqli的事务. PHP代码示例如下: $mysqli = new mysqli('localhost','root','','DB_Lib2Test'); $mysqli->autocommit(false);//开始事物 echo 'ok'; }else{ echo 'err'; $mysqli->rollback(); } 第二部分,php中关于mysqli和mysql区别 php-mysql 是 php 操作 mysql 资料库最原始的 extension ,php-mysqli 的 i 代表 improvement ,提更了相对进阶的功能,就 extension 而言,本身也增加了安全性。而 pdo (php data object) 则是提供了一个 abstraction layer 来操作资料库。 PHP实例代码如下: <?php mysql_connect($db_host, $db_user, $db_password); mysql_select_db($dn_name); $result = mysql_query("SELECT `name` FROM `users` WHERE `location` = '$location'"); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {//开源代码phpfensi.com echo $row['name']; PHP实例代码如下: <?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 范例的写法) 和 procedural style (上面 php-mysql 范例的写法)两种写法…等等. PHP实例代码如下: <?php $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name); echo $id . $name . $gender . $location; } $stmt->close(); $mysqli->close(); ?> 但看到这边又发现了一些缺点,例如得 bind result,这个就有点多馀,不过这其实无关紧要,因为最大的问题还是在于这不是一个抽象(abstraction)的方法,所以当后端更换资料库的时候,就是痛苦的开始… 于是 pdo 就出现了(备注:目前 ubuntu 和 debian 来说,pdo 并没有直接的套件可以安装,而是必须透过 pecl 安装)。 PHP实例代码如下: roga@carlisten-lx:~$ pecl search pdo ======================================= Package Stable/(Latest) Local PDO 1.0.3 (stable) PHP Data Objects Interface. 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 安装装好后,就可以透过以下方式来操作资料库,代码示例: <?php $dsn = "mysql:host=$db_host;dbname=$db_name"; $dbh = new PDO($dsn, $db_user, $db_password); $sql = "SELECT `name`, `location` FROM `users` WHERE `location` = ? , `name` = ?"; $sth = $dbh->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)。甚至是回传栏位名称的大小写…等等。 3. pdo 支援 bind column 的功能,除了基本的 prepare, execute 以外,也可以 bind 单一栏位,并且指定栏位型态。 最喜爱透过 dbi 来连接资料库,像是 activerecord 以及 propel orm(object-relational mapping)。 例如说以 activerecord 为例,如果要实现这样的 sql 叙述… insert into `users` (id, name, gender, location) values(1, 'roga', 'male', 'tpe') 以 pdo 来写是,代码示例: <?php $sql = "INSERT INTO `users` (id, name, gender, location) VALUES(?, ?, ?, ?)"; $sth = $dbh->prepare($sql); $sth->execute(array(1, 'roga', 'male', 'tpe')); ?> 但以 ActiveRecord 来说的话,则是,代码示例: <?php $user = new User(); $user->id = 1; $user->name = 'roga'; $user->gender = 'male'; $user->location = 'tpe'; $user->save(); mysqli类不是php自带的吗? 不是默认开启的,win下要改php.ini,去掉php_mysqli.dll前的;,linux下要把mysqli编译进去。 一:Mysqli.dll是一个允许以对象的方式或者过程操作数据库的,它的使用方式也很容易。这里就几个常见的操作和 mysql.dll做一个对比。 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |