加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

深入详解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编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读