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

《PHP和MySQL Web开发(原书第4版)》第11章 使用PHP从Web访问MySQL数据库

关灯直达底部

在我们前面使用PHP的过程中,使用了普通文件来存储与检索数据。第2章中介绍这种文件时,我们提到了在Web应用中使用关系数据系统可以使得这些存储和检索操作变得更容易、更安全、更有效。现在,在已经使用了MySQL创建数据库后,我们可以开始通过基于Web的前台来连接该数据库。

在本章中,我们将介绍如何使用PHP从Web访问Book-O-Rama数据库。我们将学习到如何从数据库读取数据和将数据写入数据库,以及如何过滤潜在的、可能造成麻烦的输入数据。

在本章中,我们将主要介绍以下内容:

■Web数据库架构的工作原理

■通过Web查询数据库的基本步骤

■建立数据库连接

■获取关于可用数据库的信息

■选择要使用的数据库

■查询数据库

■检索查询结果

■与数据库断开连接

■在数据库中插入新信息

■使用prepared语句

■使用PHP与数据库交互的其他接口

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

11.1 Web数据库架构的工作原理

在第8章中,我们简单地介绍了数据库架构的工作原理,作为一个简单的回顾,在这里,我们给出如下所示的基本步骤:

1)一个用户的浏览器发出一个HTTP请求,请求特定的Web页面。例如,用户中能使用一个HTML表单请求搜索Book-O-Rama数据库中所有由Michael Morgan编写的书籍。该搜索结果页面为results.php。

2)Web服务器接收到对results.php页面的请求后,检索该文件,并将其传递给PHP引擎处理。

3)PHP引擎开始解析脚本。脚本主要包括了连接到数据库和执行查询的命令(执行对书籍的搜索)。PHP启动了对MySQL服务器的连接并向该服务器发送适当的查询。

4)MySQL服务器接收到数据库查询的请求,开始处理这个查询,并将查询结果(一个书籍的列表)返回给PHP引擎。

5)PHP引擎完成了脚本的运行后(其中包括以HTML格式表示经过处理后的查询结果),然后将该HTML返回给Web服务器。

6)Web服务器再将HTML返回给客户端浏览器,用户就可以看到所要求查询的书籍。现在,我们已经有了一个MySQL数据库,因此就可以编写PHP代码来执行上述步骤。我们从搜索表单开始。这个搜索表单是一个普通的HTML表单。代码如程序清单11-1所示。

程序清单11-1 search.html——Book-O-Rama的数据库搜索页

<html>

<head>

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

</head>

<body>

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

<form action=/"results.php/"method=/"post/">

Choose Search Type:<br/>

<select name=/"searchtype/">

<option >Author</option>

<option >Title</option>

<option >ISBN</option>

</select>

<br/>

Enter Search Term:<br/>

<input name=/"searchterm/"type=/"/"text/"size=/"40/"/>

<br/>

<input type=/"submit/"name=/"submit/"/>

</form>

</body>

</html>

这是一个非常直观的HTML表单。其输出结果如图11-1所示。

图 11-1 搜索表单非常简单,可以根据书籍的标题、作者或ISBN号进行搜索

当点击/"Search/"(搜索)按钮时,将调用results.php脚本。程序清单11-2给出完整代码。在本章的后续内容中,我们将讨论该脚本的功能及其工作原理。

程序清单11-2 results.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);

}

@$db=new mysqli(/'localhost/',/'bookorama/',/'bookorama123/',/'books/');

if(mysqli_connect_errno){

echo/'Error:Could not connect to database.Please try again later./';

exit;

}

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

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

$num_results=$result->num_rows;

echo/"<p>Number of books found:/".$num_results./"</p>/";

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

$row=$result->fetch_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>/";

}

$result->free;

$db->close;

?>

</body>

</html>

请注意,以上脚本允许输入MySQL通配符%和_。这个功能对用户来说是非常有用的。如果它会给应用程序带来问题,你就必须对字符转义。

图11-2给出了该脚本执行搜索操作以后的结果。

图 11-2 在Web页面中显示了运行result.php脚本搜索到的关于Java的书籍