首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》11.5 使用PHP与数据库交互的其他接口

关灯直达底部

PHP支持连接到许多不同数据库的函数,包括Oracle、Microsoft SQL Server和PostgreSQL。

通常,连接和查询这些数据库的基本原理是相同的。个别函数名称可能会有所不同,而且不同的数据库具有不同的功能,但是如果可以连接到MySQL,就应该能够很容易应用MySQL中的知识连接到其他数据库。

如果希望使用PHP还没有提供支持的特殊数据库,可以使用常规的ODBC函数。ODBC表示开放的数据库连接,它是连接数据库的标准。由于各种明显的原因,ODBC只具有任何函数集的有限功能。如果要求必须兼容所有数据库,就不能使用任何数据库的特殊功能。

除了PHP附带的函数库以外,一些可供使用的数据库抽象类,例如MDB2,允许为不同的数据库类型使用相同的函数名称。

使用常规的数据库接口:PEAR MDB2

接下来,我们将简要地介绍使用PEAR MDB2抽象层的例子。这是PEAR所有组件中使用最为广泛的组件之一。关于MDB2抽象层的安装,请参阅附录A中“PEAR的安装”一节的详细介绍。

为了便于比较,我们将介绍如何使用MDB2来编写搜索结果的脚本(见程序清单11-5)。

程序清单11-5 results_generic.php——从MySQL数据库检索结果并且格式化以供显示

<html>

<head>

<title>Book-O-Rama Search Results</title>

</head>

<body>

<h1>Book-O-Rama Search Results</h1>

<?php

//create short variable names

$searchtype=$_POST['searchtype'];

$searchterm=trim($_POST['searchterm']);

if(!$searchtype||!$searchterm){

echo"You have not entered search details.Please go back and try again.";

exit;

}

if(!get_magic_quotes_gpc){

$searchtype=addslashes($searchtype);

$searchterm=addslashes($searchterm);

}

//set up for using PEAR MDB2

require_once('MDB2.php');

$user='bookorama';

$pass='bookorama123';

$host='localhost';

$db_name='books';

//set up universal connection string or DSN

$dsn="mysqli://".$user.":".$pass."@".$host."/".$db_name;

//connect to database

$db=&MDB2::connect($dsn);

//check if connection worked

if(MDB2::isError($db)){

echo$db->getMessage;

exit;

}

//perform query

$query="select*from books where".$searchtype."like'%".$searchterm."%'";

$result=$db->query($query);

//check that result was ok

if(MDB2::isError($result)){

echo$db->getMessage;

exit;

}

//get number of returned rows

$num_results=$result->numRows;

//display each returned row

for($i=0;$i<$num_results;$i++){

$row=$result->fetchRow(MDB2_FETCHMODE_ASSOC);

echo"<p><strong>".($i+1).".Title:";

echo htmlspecialchars(stripslashes($row['title']));

echo"</strong><br/>Author:";

echo stripslashes($row['author']);

echo"<br/>ISBN:";

echo stripslashes($row['isbn']);

echo"<br/>Price:";

echo stripslashes($row['price']);

echo"</p>";

}

//disconnect from database

$db->disconnect;

?>

</body>

</html>

下面,让我们看看以上代码与前面的代码有什么差异。

要连接数据库,我们使用了如下语句:

$db=MDB2::connect($dsn);

这个函数接收一个通用的连接字符串,该字符串包含了连接一个数据库所必需的所有参数。如果查看连接字符串的格式,可以看到这些参数:

$dsn="mysqli://".$user.":".$pass."@".$host."/".$db_name;

在完成数据库连接后,我们将使用isError检查该连接是否成功,如果失败,将打印错误信息并退出。

if(MDB2::isError($db)){

echo$db->getMessage;

exit;

}

假设所有操作都正确完成,我们将设置并执行一个查询,如下所示:

$result=$db->query($query);

我们可以检查返回的记录行数:

$num_results=$result->numRows;

按照以下代码取回每一行:

$row=$result->fetchRow(DB_FETCHMODE_ASSOC);

通用方法fetchRow可以以许多格式提取结果集中的一行;MDB2_FETCHMODE_ASSOC参数表示我们希望以相关数组方式返回结果行。

在输出查询结果行后,我们将关闭数据库连接:

$db->disconnect;

可以看到,这个例子非常类似于我们的第一个脚本。

使用MDB2的优点是只要记住一种数据库函数集,如果要改变数据库软件,只要对代码进行少量的修改就可以了。

既然这是一本介绍MySQL的图书,出于灵活性和速度的考虑,我们还将使用MySQL自带的本地函数库。但是,在项目中,当使用抽象层时,MDB2包所提供的抽象层特性将非常有用,因此我们可能会希望使用MDB2包。