当我开始去接触PHP的时候,真切的感受到其所具有的魅力,本着学习的态度和打破固有的语言和模式的想法,开始了PHP之旅,总的来说,走的还是比较顺利,在其中能够看到C,Java,Perl影子,学习曲线不大,但是做好产品仍然有着一条漫漫长路。
多余的话不说了,慢慢感受和领悟,本文主要讲述PHP操作数据库的三种扩展。
如下图是PHP访问数据库的三种扩展方式:
下面举出三种方式访问数据库并查询数据的实例代码:
1.mysql扩展
<?php //1:获取数据库连接 $connection = @ mysql_connect(‘127.0.0.1:3306‘, ‘root‘, ‘root‘) or die(‘Mysql connection failed ‘ . mysql_error()); //2:选择数据库 mysql_select_db(‘phptest‘) or die(‘Database phptest not exist ‘ . mysql_error()); //3:查询数据 $sql = ‘SELECT id as `编号`, name as `姓名`, birthday as `出生日期`, phone as `联系方式` , address as `地址` ‘ . ‘FROM `t_user` LIMIT 0 , 30‘; $result = mysql_query($sql) or die(‘Query failed ‘ . mysql_error()); //4:处理查询结果 #打印查询数据 echo ‘<table>‘; #打印列信息 $i = 0; echo ‘<tr>‘; while ($i < mysql_num_fields($result)) { $meta = mysql_fetch_field($result); echo ‘<td>‘; echo $meta->name; echo ‘</td>‘; $i++; } echo ‘<tr/>‘; #打印行记录 while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo ‘<tr>‘; foreach ($line as $value) { echo ‘<td>‘ . $value . ‘</td>‘; } echo ‘</tr>‘; } echo ‘</table>‘; //5:释放结果内存 mysql_free_result($result); //6:关闭数据库连接 mysql_close($connection); ?>
2.mysqli扩展
<?php #使用面向对象的方式操作mysql数据库 //1:创建mysqli对象 $mysqli = new mysqli(); //2:连接数据库 $mysqli->connect(‘127.0.0.1‘, ‘root‘, ‘root‘); $mysqli->select_db(‘phptest‘); if ($mysqli->connect_errno) { echo ‘连接数据库失败‘; exit (); } //3:获取MySQLi_STMT(执行SQL命令)对象,$stmt $sql = ‘SELECT id as `编号`, name as `姓名`, birthday as `出生日期`, phone as `联系方式` , address as `地址` ‘ . ‘FROM `t_user` LIMIT 0 , 30‘; if ($stmt = $mysqli->prepare($sql)) { #执行查询 $stmt->execute(); $stmt->bind_result($id, $name, $birthday, $phone, $address); #打印查询数据 echo ‘<table>‘; #打印列信息 echo ‘<tr>‘; $meta = $stmt->result_metadata()->fetch_fields(); foreach ($meta as $val) { echo ‘<td>‘; echo $val->name; echo ‘</td>‘; } echo ‘<tr/>‘; while ($stmt->fetch()) { echo ‘<tr>‘; echo ‘<td>‘ . $id . ‘</td>‘; echo ‘<td>‘ . $name . ‘</td>‘; echo ‘<td>‘ . $birthday . ‘</td>‘; echo ‘<td>‘ . $phone . ‘</td>‘; echo ‘<td>‘ . $address . ‘</td>‘; echo ‘</tr>‘; } echo ‘</table>‘; echo ‘<h4>查询结果记录数:‘ . $stmt->num_rows.‘</h4>‘; //4:关闭MySQLi_STMT $stmt->close(); } //5:关闭数据库连接 $mysqli->close(); ?>
上面使用的是mysqli扩展的面向对象风格的方式进行数据库操作,如何要使用面向过程的风格操作数据库则需要使用函数。比如关闭数据库连接,面向对象风格则是:$mysqli->close() 而使用面向过程风格则是:close($mysqli),具体详则可以参见PHP_Manual。
3.PDO_MYSQL扩展
数据库连接配置信息pdo-inc.php:
<?php $dsn = ‘mysql:host=127.0.0.1:3306;dbname=phptest‘; $username = ‘root‘; $password = ‘root‘; $opt = array ( PDO :: ATTR_TIMEOUT => 40 ); ?>
使用PDO访问数据库
<?php //1:引入数据库连接信息 require_once (‘pdo-inc.php‘); //2:创建PDO对象 try { $pdo = new PDO($dsn, $username, $password, $opt); } catch (PDOException $e) { echo ‘数据库连接失败 ‘ . $e->getMessage(); exit (); } $sql = ‘SELECT id as `编号`, name as `姓名`, birthday as `出生日期`, phone as `联系方式` , address as `地址` ‘ . ‘FROM `t_user` LIMIT 0 , 30‘; //3:创建预编译命令对象PDOStatement if ($stmt = $pdo->prepare($sql)) { //4:执行 $stmt->execute(); #打印查询数据 echo ‘<table>‘; echo ‘<tr>‘; for ($i = 0, $columnCount = $stmt->columnCount(); $i < $columnCount; $i++) { $meta = $stmt->getColumnMeta($i); echo ‘<td>‘; echo $meta[‘name‘]; echo ‘</td>‘; } echo ‘<tr/>‘; $row_num = 0; while ($row = $stmt->fetch(PDO :: FETCH_NUM)) { $row_num++; echo ‘<tr>‘; foreach ($row as $value) { echo ‘<td>‘ . $value . ‘</td>‘; } echo ‘</tr>‘; } echo ‘</table>‘; #需要统计查询的行数 echo ‘一共‘ . $row_num . ‘条记录<br/>使用PDOStatement::rowCount来统计,一共‘ . $stmt->rowCount() . ‘条记录‘; //5:关闭游标 $stmt->closeCursor(); } //6:释放PDO对象 $pdo = null; ?>
看到上面代码很明显的不同在于访问Mysql数据库,却再也看不到Mysql相关函数和字样,这一点正是PDO所希望的,PDO使得PHP访问数据库将面向接口而不是具体的实现,这也为改变数据库而不用担心应用程序与数据库过度的耦合提供了基础。简而言之就是做到了面向对象中的面向接口编程的原则。
就操作数据而言,更多的是针对API来编程,具备数据库的相关知识(主要是SQL)和熟悉相关API既可以操作数据库,面对PHP操作数据库的多种扩展,到底使用哪一种方式,暂时不知道,看情况吧。
本文出自 “野马红尘” 博客,谢绝转载!
原文地址:http://aiilive.blog.51cto.com/1925756/1546901