LAMP 技术简介(4)

来源:互联网 发布:linux 移动文件夹指令 编辑:程序博客网 时间:2024/05/16 20:30

通过 PHP 访问数据库

在 PHP 中连接到 MySQL

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

首先,创建 4 个变量,用于存放关于数据库的位置以及如何连接到数据库的详细信息。这 4 个变量分别为 db_hostdb_usernamedb_passworddb_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'];}

然后应该可以看到输出的记录,如图 5 所示。

图 5. 显示 customers 表的内容
显示 customers 表的内容

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 表示降序。