技术开发 频道

PHP 开发经典教程(Part 8): 数据库操作

ext/mysqli扩展 

    如果你正在使用PHP 5,那么你可以使用新的提供了一系列新特征的ext/mysqli扩展来做同样的事。该扩展可以两种方式来使用:过程式的(使用函数)和面向对象的(使用类和属性)。考虑下一个脚本,该脚本以过程式的方式来使用ext/mysqli。

<html> <head> <basefont face="Arial"> </head> <body> <?php // set server access variables $host = "localhost"; $user = "test"; $pass = "test"; $db = "testdb"; // open connection $connection = mysqli_connect($host, $user, $pass, $db) or die ("Unable to connect!"); // create query $query = "SELECT * FROM symbols"; // execute query $result = mysqli_query($connection, $query) or die ("Error in query: $query. ".mysqli_error()); // see if any rows were returned if (mysqli_num_rows($result) > 0) { // yes // print them one after another echo "<table cellpadding=10 border=1>"; while($row = mysqli_fetch_row($result)) { echo "<tr>"; echo "<td>".$row[0]."</td>"; echo "<td>".$row[1]."</td>"; echo "<td>".$row[2]."</td>"; echo "</tr>"; } echo "</table>"; } else { // no // print status message echo "No rows found!"; } // free result set memory mysqli_free_result($result); // close connection mysqli_close($connection); ?> </body> </html>

 

    就像你可以看到的那样,这个看起来和为ext/mysql编写的代码十分相似。唯一真正的不同(至少对肉眼来说)就是函数名字现在以mysqli_*而不是mysql_*作为开头这一事实。当然,在也有很多的不同:ext/mysqli比常规的ext/mysql更快、更安全和更强大,而且也包含了对prepared语句、结果集、多个并发查询、事务以及大量其他酷的技术的支持。 

    你也可以以面向对象的方式来使用ext/mysqli,在这里,每个任务(连接、查询、数据获取)实际上都是mysqli()对象的方法:

<html> <head> <basefont face="Arial"> </head> <body> <?php // set server access variables $host = "localhost"; $user = "test"; $pass = "test"; $db = "testdb"; // create mysqli object // open connection $mysqli = new mysqli($host, $user, $pass, $db); // check for connection errors if (mysqli_connect_errno()) { die("Unable to connect!"); } // create query $query = "SELECT * FROM symbols"; // execute query if ($result = $mysqli->query($query)) { // see if any rows were returned if ($result->num_rows > 0) { // yes // print them one after another echo "<table cellpadding=10 border=1>"; while($row = $result->fetch_array()) { echo "<tr>"; echo "<td>".$row[0]."</td>"; echo "<td>".$row[1]."</td>"; echo "<td>".$row[2]."</td>"; echo "</tr>"; } echo "</table>"; } else { // no // print status message echo "No rows found!"; } // free result set memory $result->close(); } else { // print error message echo "Error in query: $query. ".$mysqli->error; } // close connection $mysqli->close(); ?> </body> </html>

 

    这里,new关键字用于实例化类mysqli的一个对象,而且传递给对象构造器连接信息(包括数据库名称)。然后,存储于变量$mysqli中的所得对象展现执行查询、获取和处理行以及处理错误的任务的方法和属性。 

    如果你仔细查看上述两个脚本,那么你将会注意到函数和方法名称以及脚本结构之间的众多的相似性。然而,在两个方法中,推荐面向对象的方法,尤其是根据PHP 5中的新的对象模型。 

    需要记住其他几个重要的差异:

•使用ext/mysqli,你可以在传递给mysqli_connect()函数或mysqli()构造器的参数中包含数据库名称。

•当调用mysqli_query()或mysqli object's query()方法时,连接标识符是强制而不是可选的。

0
相关文章