中国计算机辅助教学网 ::   首  页   技术交流  LAMP架构
LAMP 技术简介
2008年06月02日 14:54,星期一   作者:网络管理员
探究 Linux-apache-mysql-PHP(也称 LAMP)Web 开发框架,并展示该框架如何帮助构建用于解决常见业务问题的应用程序。本教程首先探索 LAMP 架构,然后介绍基本的 PHP 概念。在介绍 PHP 的背景知识之后,本教程将解释 mysql 支持,并着重介绍数据库概念和如何从 PHP 中访问 mysql。所有这些技术都是以一个现实世界中的客户管理实例为背景进行讨论的。无论您在什么行业,都必须要访问信息、处理信息,并使信息随处可用。在一些需要永久在线的行业中,这一点就显得尤其重要,因为用户常会期望能在任意地方获得任意数据。
我们将探究 Linux-apache-mysql-PHP(也称 LAMP)Web 开发框架,并展示该框架如何帮助构建用于解决常见业务问题的应用程序。本教程首先探索 LAMP 架构,然后介绍基本的 PHP 概念。在介绍 PHP 的背景知识之后,我们将解释 mysql 支持,并着重介绍数据库概念和如何从 PHP 中访问 mysql。所有这些技术都是以一个现实世界中的客户管理实例为背景进行讨论的。

先决条件,需要以下工具:
  • 一个可用的 LAMP 系统(获得这个系统并使之运行的最容易的方法是通过 [url=http://www.apachefriends.org/en/xampp.html]XAMPP apache 发行版[/url],它包含了所有必需的组件。
  • phpMyAdmin(XAMPP 附带)
  • 一个 Web 浏览器(建议使用 Mozilla Firefox
  • 一个文本编辑器
数据组织方面的挑战

假 设您在一家中型企业工作,该企业需要管理它的企业数据。所有关于客户、产品、事务和会议的信息都潦草地写在便条上,并且管理混乱,这些便条很快便堆满了桌 子。您知道必须要更好地管理这些信息,但是没有大量的时间专门来解决这个问题,并且也没有时间学习编程语言和工具集。您需要一个便捷的解决方案。

幸运的是,有一套很棒的工具可以帮助您构建一个能解决上述问题的应用程序。本教程展示如何使用 LAMP 产品组合解决基本的数据管理问题,并提供了将数据存储在数据库中及在 Web 页面显示数据所需要的基本技巧。

LAMP 平台由四个组件组成,呈分层结构。每一层都提供了整个软件栈的一个关键部分:

Linux:Linux 处在最低层,提供操作系统。其他每个组件实际上也在 Linux 上运行。但是,并不一定局限于 Linux,如有必要,其他组件也可以在 Microsoft® Windows®、Mac OS X 或 UNIX® 上运行。
apache:次 低层是 apache,它是一个 Web 服务器。apache 提供可让用户获得 Web 页面的机制。apache 是一款稳定的、支持关键任务的服务器,Internet 上超过 65% 的网站都使用它作为 Web 服务器。PHP 组件实际上是在 apache 中,动态页面可以通过 apache 和 PHP 创建。
mysqlmysql 提供 LAMP 系统的数据存储端。有了 mysql,便可以获得一个非常强大的、适合运行大型复杂站点的数据库。在 Web 应用程序中,所有数据、产品、帐户和其他类型的信息都存放在这个数据库中,通过 SQL 语言可以很容易地查询这些信息。
PHP:PHP 是一门简单而有效的编程语言,它像是粘合剂,可以将 LAMP 系统所有其他的组件粘合在一起。您可以使用 PHP 编写能访问 mysql 数据库中的数据和 Linux 提供的一些特性的动态内容。

开始

首先,您将构建一个客户信息工具。通过使用 LAMP 产品组合中的工具,构建一个应用程序,用于将客户数据存储在一个数据库中,并在一个 Web 页面上显示该数据。

在 开发应用程序时要特别注意一点,HTML 只是用来对页面进行布局:不能使用 HTML 来执行动态处理,例如从数据库中获取数据。要提供这种动态功能,必须将 PHP 代码插入到要使之成为动态页面的页面中。例如,在本教程后面的章节中,会把从数据库中获得的客户信息添加到一个 Web 页面的特定部分。具体做法是将光标移到 Web 页面中要显示信息的地方,然后编写用于从数据库获取数据并显示数据的 PHP 代码。当把这段 PHP 代码插入页面中时,应该将它放在 <?php 和 ?> 符号之间。




创建 index.php
首先创建一个名为 index.php 的新页面。然后,插入以下代码:

<html><body><h1>A simple example</h1>This is normal HTML<?php  echo "This is PHP!";?></body></html>



在这个例子中,可以看到在一些 HTML 标记当中夹杂了一个专门的 PHP 块。在 <?php 和 ?> 符号之间,还可以看到第一个 PHP 命令,即 echo。这个命令在浏览器中显示双引号中的文本。还应注意,每个 PHP 命令都以一个分号(;)结束。当 echo 将文本发送到浏览器时,还可以在双引号中使用 HTML 标记。例如,可以使用 <strong> HTML 标记将 PHP 变为粗体。

echo "This is <strong>PHP</strong>";
创建 mysql 数据库

phpMyAdmin 客户机

在 创建 Web 应用程序之前,必须首先创建用于存储客户信息的数据库。您将使用该数据库存储数据、显示数据等等。为了在应用程序中引入 mysql 支持,需要执行一些步骤。首先,必须创建一个数据库,并向该数据库中填充数据,在这一步中可以使用 phpMyAdmin 客户机。

phpMyAdmin 客户机提供一个 Web 界面(见图 1),通过该界面可以管理 mysql 数据库的每个方面,包括管理用户、创建数据库、添加表、插入数据和创建关系。mysql 数据库的每个方面实际上都是由 SQL 控制的。

创建 mysql 数据库

当装载完毕并登录到 phpMyAdmin 之后,执行以下步骤创建数据库:

在 Create new database 文本框输入 customer,以创建一个具有该名称的数据库,然后单击 Create。新的数据库出现在左面板中。
输入 customerlist 作为表名,输入 3 作为字段数,创建一个新表。
这时弹出设计窗口,在此窗口中可以配置表中的三个字段。在每一行,每个字段都有一些选项。在这个表中,需要创建以下字段:

id:该字段为表中每个记录提供一个惟一的 ID。设置惟一的字段是一种很好的做法,这个字段可用于标识一个记录。最容易的方法是创建一个名为 ID 的数字型字段,并确保每个记录有一个不同的数字。mysql 可以自动添加一个惟一的数字,从而帮您轻松实现这一点。
forename:该字段包含该表中一个客户的名字。
surname:该字段包含姓氏。我建议将姓和名分开,因为数据越抽象,数据库的灵活性就越大
填充字段

在 phpMyAdmin 中填充这些字段很简单。只需从第一行开始,依次输入以下信息:

在第一行中,在 Field 框中输入 id,并将 Type 设置为 INT。从 Extra 下拉菜单中选择 auto_increment(auto_increment 选项将 mysql 设置为每当添加一个记录时,自动更新 id 字段,将一个新的数字添加到该字段中)。最后,在此行的末尾选择 PRIMARY KEY 选项,以防 mysql 允许这个字段出现重复值。
在第二行中,在 Field 框输入 forename,将 Type 设置为 VARCHAR,并将 Length 设置为 20。在这个字段中,之所以将数据类型设置为变长字符,是为了确保该字段长度不超过 20 个字符,而且当数据被添加后,只会占用适量的内存。
第三行与第二行相同,惟一区别是 Field 框中应输入 surname。

查看 SQL 输出

关 于 phpMyAdmin 需要特别注意的一点是,每当在这个界面中执行任何交互时,phpMyAdmin 会显示用于执行该动作的 SQL 语句。这对于学习 SQL 非常有帮助,所以应该经常注意观察这个输出,看看用于执行请求的 SQL 命令是怎样的。对于刚才创建的表,SQL 如下所示:

CREATE TABLE `customerslist` (`id` INT NOT NULL AUTO_INCREMENT ,`forename` VARCHAR( 20 ) NOT NULL ,`surname` VARCHAR( 20 ) NOT NULL ,PRIMARY KEY ( `id` ));

向表中添加数据

现在必须向刚才创建的表中添加一些数据。为此,单击 Insert 选项卡。phpMyAdmin 界面显示两个表单,从中可以添加两个记录(见图 3)。您不一定真正需要添加两个记录,但是当需要添加大量数据时,采用两个表单会比较方便。填充 forename 和 surname 字段,记住不要添加任何东西到 id 字段中;auto_increment 选项已确保那个字段将自动填充。添加多个记录,使数据库看上去有较多客户。
添加了记录之后,单击 Browse 查看表中的内容,
过 PHP 访问数据库

在 PHP 中连接到 mysql

创建好一个表之后,便可以将 mysql 连到 PHP。执行这个过程的第一步是建立到 mysql 服务器的一个连接。当建立好这个连接后,便可以与服务器进行交互。

首先,创建 4 个变量,用于存放关于数据库的位置以及如何连接到数据库的详细信息。这 4 个变量分别为 db_host、db_username、db_password 和 db_database。注意,PHP 中的变量以一个美元符号($)开头:

$db_host = "localhost";$db_username = "bob";$db_password = "sum65for!";$db_database = "customers";
这 4 个变量包含关于数据库连接的重要信息。第一个变量是 $db_host,用于表明 mysql 服务器的位置(除非是在单独一台联网的计算机上运行该服务器,否则这个位置很可能是本地主机)。$db_username 和 $db_password 变量包含用于连接的认证信息(在这个例子中,就是用户名 bob 和密码 sum65for!)。最后,还需要指出要处理 mysql 服务器上的哪个数据库;$db_database 变量将这个数据库指定为 customers 数据库。

执行连接

记住,这里还没有真正连接到数据库;以上代码只是创建了一些包含相关信息的变量。为了连接到数据库,可以运行以下两行代码:

$db = mysql_connect($db_host, $db_username, $db_password);mysql_select_db($db_database, $db);



第一行代码真正创建连接。它使用 mysql_connect 函数将主机、用户名和密码信息从变量传递到服务器。连接的结果被存储在 $db 变量中。然后,在第二行代码中,通过 mysql_select_db 函数表明要使用服务器上的哪个数据库。为此,传递包含所选数据库的 $db_database 变量,并指出要从中选择那个数据库的连接($db)。当输入这两行代码后,应该可以得到一个成功的连接。
执行查询

创建了一个成功的连接之后,接下来的步骤是从数据库中查询一些信息,以便利用这些信息。在这个项目中,需要从数据库中获取客户信息,并将该信息显示在屏幕上。

执行查询的第一步是创建 SQL。在刚才编写的数据库连接代码的下方,添加下面这行代码:

$sql = "SELECT * FROM customers;";

这行代码从 customers 表中选择所有值。可以这样从左至右读这个命令:从(FROM)customers 表(customers)中选择(SELECT)所有值(*),然后结束查询(;)。同样,在脚本中的这个地方,还并没有真正执行查询:上述代码只是将 SQL 查询放入一个变量中。为了真正将该查询发送到数据库,可以使用以下命令:

$result = mysql_query($sql);

这个命令的 mysql_query 函数将 $sql 变量发送到服务器。然后,查询的结果(包含查询所返回结果的一个信息集合)被存储在 $result 变量中。存储在 $result 变量中的实际数据称作一个记录集,它提供一个充满信息的容器,这些信息都是查询的结果。

键-值对和数组

当引用记录集中的数据时,是以键-值对 的形式引用它的。这个概念很重要,在从数据库中获取数据之前,我将花一点时间讨论一下这些键-值对。

键-值对的思想是有一系列的键,每个键有一个值与之相关联。例如,假设要存储一系列的偏好选择,并将 blue 值与 colour 键相关联,将 10 值与 number 键相关联。那么,在使用这些值时,如果在数组中查找 colour,那么就希望返回 blue。可以用 array() 函数设置这种类型和其他任何类型的数组:

$array = array("colour" => "blue", "number" => 10);
这行代码将 colour 元素设置为 blue 值,并将 number 元素设置为 10 值。现在可以用下面这行代码来引用 colour 键:

echo $array['colour'];
当运行这行代码时,可以看到 blue 是如何被输出的,这为在键-值对中存储关于特定事物的信息提供了一种简便方法。这种设置使得数组非常适合存储配置信息和偏好设置之类的细节。

如果要用 foreach 迭代整个数组,可以使用以下代码:

foreach($array as $key => $value) {  echo $key . " contains: " . $value . "<br />";}
这个例子将用于访问键的变量命名为 $key,而将用于访问值的变量命名为 $value。然后,在 echo 语句中将所有这些信息粘合在一起,该语句将键、文本 contains、值和一个 <br /> 标记串接起来,其中的 <br /> 标记充当一个回车符,以便将每个条目放在一个新行上。
从数据库中获取客户信息

那么,这个数组理论与从数据库中获取客户信息有什么联系呢?可以使用一个数组存储每一行的细节,并且将数据存储在一系列的键-值对中。通过这种方法,如果要获得 forename 字段的内容,只需在数组中查找 forename 键。

为了迭代记录集中的每一行,可以使用以下例子:

while($row = mysql_fetch_assoc($result)) {  echo $row['forename'] . " " . $row['surname'];}
然后应该可以看到输出的记录。
while 循环的作用是,当 while 语句旁边的括号中的值为 true 时,不断重复 { 与 } 之间的代码。在这个例子中,括号中的条件为 $row = mysql_fetch_assoc($result)。这一行获取 $result 中的结果集,并将它传递给 mysql_fetch_assoc 函数,以便获取第一行记录,并将它放入到一个名为 $row 的关联数组中。当把这一行代码放入 while() 循环条件时,该循环将迭代记录集中的每一行,并将每一行放入 $row 关联数组。这个功能便于用相同的数组名($row)访问记录集中的所有数据。

while() 循环中的代码通过引用 $row 数组中的字段名称,简单地将每一行的内容显示在页面上。例如,$row['forename'] 显示数据库中每一行的 forename 字段的内容。在这个例子中,可以看到如何将 forename 字段、一个空格和 surname 字段串接起来,这行代码将导致屏幕上显示表中的姓名。

串接

PHP 编程中一个最基本的概念 —— 也是 PHP 新用户最容易犯错误的一个概念 —— 是串接(concatenation)。该技术通过使用 . 符号将一个变量的内容与其他信息连接在一起。在下面的例子中,可以看到 . 如何将一些文本与 $name 变量连接在一起:
$name = "Bob Smith";echo "Your name is " . $name;
在上面的例子中,建议像这样串接字符串与变量,但实际上也不一定要这么做。可以将上面的代码改为下面这行代码:
echo "Your name is $name";
这行代码也许更容易理解,但是串接使得代码看上去更整洁。此外,对于非串接代码,大多数文本编辑器不能通过适当的语法突出显示,而且,对于数组必须使用串接。
回页首
微调 SQL

在第一个连接到 mysql 的例子中,SQL 相当简单。SQL 也非常灵活。您很可能想搜索特定的记录,并以不同的方式对返回的数据排序,这些都可以在 SQL 中完成,因此 PHP 脚本基本上可以保持不变。

完 成该项任务的一个很好的地方就是 phpMyAdmin。如前所述,每当与 phpMyAdmin 交互时,为每个交互生成的 SQL 就会显示出来。在 phpMyAdmin 中,还可以运行任意 SQL 语句,以便探索 SQL 语言和尝试不同的查询。为此,单击 phpMyAdmin 界面左侧工具栏中的 SQL 窗口小图标。这时可以看到一个新的窗口(如果使用的是 Firefox,请确保其中的弹出窗口没有挡住这个窗口),在这个窗口中可以输入 SQL 查询。当添加了一个查询时,单击 Go。主界面窗口中的查询结果会随之更新。
回页首
执行不同类型的查询

即使是对于简单的 customers 表,也可以执行不同类型的查询来以不同方式返回信息。例如,如果只想要与特定客户 ID 相匹配的行,可以尝试以下查询:

SELECT * FROM customers WHERE id = 1;
这个查询返回用户 id 为 1 的记录(这就是为什么每个表中要有一个惟一主键的原因)。也可以尝试下面的查询:

SELECT * FROM customers WHERE surname = "Curtis";
这个查询返回 surname 字段的值为 Curtis 的所有用户。如果有一个大型的 customers 数据库,那么您很可能想对返回的数据排序。为此,可以使用 ORDER BY 子句:

SELECT * FROM customers WHERE surname = "Smith" ORDER BY forename ASC;
这个查询请求 surname 为 Smith 的所有记录,返回的结果根据 forename 字段按字母顺序排序。ASC 表示升序,也可以使用 DESC 表示降序。
创建 Web 应用程序

显示客户信息:创建链接

Web 上一个常用的机制就是向下钻取(drill-down)。该技术可以显示一组链接,用户可以单击其中一个链接,然后进入另一个页面,该页面显示关于用户所单击的链接的更多信息。在这个项目中,将创建一个包含客户名称的向下钻取列表:当单击一个客户名称时,就可以查看关于该客户的更多细节。

为此,首先添加一些字段到 customers 表中,以便在链接到的页面上显示这些字段。添加 description、address、telephone 等字段和所需的任何其他类型的信息。
显示客户信息:从数据库中获取信息

现在,必须确保从数据库中获取到所有数据。将包含 SQL 的那行代码设置成这样:

$sql = "SELECT * FROM customers;";
接着,调整 while 循环的内容,将它变成一个链接,并将记录的 ID 放入链接中。这应该可以产生一个形如 http://localhost/customerinfo.php?id=1 的链接:

echo "<a href='customerinfo.php?cust_id="      . $row['id'] ."'>"      . $row['forename'] . " "      . $row['surname']      . "</a>";
这行代码动态地创建一个链接,并在链接的后面附加上每行记录的 ID。如果将鼠标悬停在链接上,在状态栏应该可以看到相应的动态 ID。
显示客户信息:创建信息页面

现在需要创建信息页面。创建一个名为 productinfo.php 的新页面,首先包括数据库连接信息:

$db_host = "localhost";$db_username = "bob";$db_password = "sum65for!";$db_database = "customers";$db = mysql_connect($db_host, $db_username, $db_password);mysql_select_db($db_database, $db);

接着,从地址栏读取值,并将该值存放在一个单独的变量中:
$theid = $_GET['cust_id'];
这行代码通过 $_GET 访问 URL 尾部的变量。PHP 中的这个特性称作 Superglobal,可以使用该特性获得 GET 变量(即出现在 URL 尾部的变量)。然后,您可能很想通过一些验证检查来运行该变量,以确保没有其他人在尝试使用该变量,但是在本教程中,我将保持脚本的简单性。

显示客户信息:获取特定记录

现在,从表中取出 ID 与 $theid 变量中存储的 ID 相匹配的特定记录。为此,可以使用以下代码:

$sql = "SELECT * FROM customers WHERE id = " . $theid . ";";$result = mysql_query($sql);

该代码将执行这个查询,现在可以通过 echo 显示结果信息:

echo $row['forename'] . "<br />";echo $row['surname'] . "<br />";echo $row['description'] . "<br />";
结束语
本 教程提供了一个简单的应用程序,以便让您对 PHP 和 mysql 编程的核心概念有初步的了解。LAMP 是一个巨大的项目,我只触及了其表面,即 LAMP 系统。LAMP 系统非常灵活。虽然我只谈到了 LAMP 开发中的少数几个方面,但这里讨论的概念可以给您打下一个坚实的基础,您可以由此进一步阅读 Internet 上大量的 LAMP 教程和文档。
 
  相关内容
 
 
主办单位:中国计算机辅助教学网 地址:南京龙蟠中路311号达美广场1803# 电话:025-84622851
开发单位:南京冠邦网络技术有限公司 维护:南京冠邦网络技术有限公司 邮箱:njcai@163.com