站长中国
设为首页 | 站长论坛

站长论坛 站长下载
您所在的位置: 站长中国 > 站长学院 > 数 据 库 > MySQL > 正文

PHP/MySQL教程(3)
  2007年08月02日20:53:41  评论(1条) 字体:[ ]
相关热点: 教程 myrow 程序 记录 循环 查询 result db %s while

一、 while循环

  在这一课里,我们将会继续深入下去,使用PHP和MySQL来写出一些简单而有用的页面。我们从昨天创建的数据库开始,显示库中的数据,但是会再稍微加以润色。

  首先,我们用下面的代码来查询数据库内容。

<>

<>

<?php


$db = mysql_connect(\"localhost\", \"root\");

mysql_select_db(\"mydb\",$db);

$result = mysql_query(\"SELECT * FROM employees\",$db);

echo \"< border=1>\n\";

echo \"<><>姓名</td><>职位</td></tr>\n\";

while ($myrow = mysql_fetch_row($result)) {

printf(\"<><>%s %s</td><>%s</td></tr>\n\", $myro
w[1], $myrow[2], $myrow[3]);


}

echo \"</table>\n\";

?>

</body>

</html>

  您可能已经注意到,我们在这个程序里加进了一些新东西。最明显的是while ()循环。该循环是说,只要数据库里还有记录可读(使用mysql_fetch_row()函数),那就把该记录赋给变量$myrow,然后执行大括号({})内的指令。仔细看一下这里,这部分是比较重要的。

  我们应该注意一下mysql_fetch_row()函数。这里有一点小问题,它返回的是一个数组,必须以数组下标来访问其中的某个字段。第一个字段下标为0,第二个是1,依此类推。在执行某些复杂查询时,这么做简直实在是太烦琐了。

  现在我们更仔细地研究一下循环过程。程序前几行我们在第一课的例子中已经看到过了。然后,在while()循环中,我们从查询结果中读取一条记录并把该记录赋给数组$myrow。接着,我们用printf函数把数据中的内容显示在屏幕上。随后,循环反复执行,读取下一条记录赋给$myrow。这样继续下去,直到所有记录都已被读取完为止。

  使用while()循环的一个好处是,如果数据库查询没有返回任何记录,那您也不会收到错误信息。在刚执行循环语句时,循环条件就不满足,不会有任何数据赋给$myrow,程序就直接往下运行了。

  但是如果查询未返回任何数据,我们怎么让用户知道这一点呢?我们也许该提供点儿相关的消息给用户吧。这是可以做到的,下面我们就看看怎么做。

二、 if-else

  请看下面的程序。

 

<>

<>

<?php

$db = mysql_connect(\"localhost\", \"root\");

mysql_select_db(\"mydb\",$db);

$result = mysql_query(\"SELECT * FROM employees\",$db);

if ($myrow = mysql_fetch_array($result)) {

echo \"< border=1>\n\";

echo \"<><>姓名</td><>住址</td></tr>\n\";

do {

printf(\"<><>%s %s</td><>%s</tr>\n\", $myrow[\"first\"],
$myrow[\"last\"], $myrow[\"address\"]);

} while ($myrow = mysql_fetch_array($result));

echo \"</table>\n\";

} else {

echo \"对不起,没有找到记录!\";

}


?>


</body>


</html>

  这段程序中包含有不少新内容,不过这些内容都相当简单。首先是 mysql_fetch_array()函数。该函数与mysql_fetch_row()十分相近,只有一点不同:使用这个函数时,我们可以通过字段名而不是数组下标来访问它返回的字段,比如$myrow[\"first\"]。这样我们就可以省不少力气了。另外,程序中还加进了do/while循环和if -else条件判定语句。

  if-else条件判定语句的含意是,如果我们成功地把一条记录赋给了$myrow变量,那就继续;否则,就跳到else部分,执行那里的指令。

  do/while循环是我们在上页中用户的while()循环的一个变体。我们要用到do/while的原因是:在最初的if语句中,我们已经把查询返回的第一条记录赋给变量$myrow了。如果这时我们执行一般的while循环(比如,while ($myrow = mysql_fetch_row($result)),那我们就会把第二条记录赋给$myrow,而第一条记录就被冲掉了。但是do/while循环可以让我们执行一次循环体内容之后再来判定循环条件。因此,我们就不会不小心漏掉第一条记录了。

  最后,如果查询结果没有任何记录的话,程序就会执行包含在else{}部分的那些语句。如果您想看到这部分程序的执行情况,可以把SQL语句改为SELECT * FROM employees WHERE id=6,或改成其他形式,使得查询结果中没有任何记录。

  下面我们来扩充一下循环if-else 代码,使得页面内容更加丰富。相信您会喜欢的。

三、 第一个程序脚本

  我们刚刚学到了循环语句,下面我们将在一个更加实际一点的例子中看看如何运用它。但是在这之前,您应该知道如何处理Web表格、查询参数串,以及表单的GET方法和POST方法。

  现在,我们要处理查询参数串,正如您所知道的,有三种方法可以把参数内容写入到查询参数串中。第一种是在表格中使用GET方法;第二种是在浏览器的地址栏中输入网址时直接加上查询参数;第三种是把查询参数串嵌入到网页的超链接中,使得超链接的内容象下面这样:< href=\"http://my_machine/mypage.php3?id=1\">。我们现在要用到最后这一种方法。

  一开始,我们再来查询我们的数据库,列出员工姓名。看看下面的程序,其中大部分内容我们都已经很熟悉了。

 

<>

<>

<?php

$db = mysql_connect(\"localhost\", \"root\");

mysql_select_db(\"mydb\",$db);

$result = mysql_query(\"SELECT * FROM employees\",$db);

if ($myrow = mysql_fetch_array($result)) {

do {

printf(\"< href=\"%s?id=%s\">%s %s</a><>\n\",
$PATH_INFO, $myrow[\"id\"], $myrow[\"first\"], $myrow[\"last\"]);

} while ($myrow = mysql_fetch_array($result));

} else {

echo \"对不起,没有找到记录!\";

}

?>

</body>

</html>

这里没什么特别的,只是printf函数有些不同。那我们就来仔细研究一下。

  首先要注意的是,所有的引号前面都有一个反斜杠。这个反斜杠告诉PHP直接显示后面的字符,而不能把后面的字符当作程序代码来处理。另外要注意变量$PATH_INFO的用法。该变量在所用程序中都可以访问,是用来保存程序自身的名称与目录位置的。我们之所以用到它是因为要在页面中再调用这个程序本身。使用$PATH_INFO,我们可以做到,即使程序被挪到其他目录,甚至是其他机器上时,我们也能保证正确地调用到这个程序。

  正如我刚才提到的,程序所生成的网页,其中包含的超链接会再次调用程序本身。不过,再次调用时,会加入一些查询参数。

  PHP见到查询参数串中包含有“名字=值”这样的成对格式时,会作一些特别的处理。它会自动生成一个变量,变量名称与取值都与查询参数串中所给定的名称和取值相同。这一功能使得我们可以在程序中判断出是第一次执行本程序还是第二次。我们所要做的只是问问PHP$id这个变量是否存在。

  当我知道这个问题的答案后,我可以在第二次调用程序时显示一些不同的结果出来。请看:

<>

<>

<?php

$db = mysql_connect(\"localhost\", \"root\");

mysql_select_db(\"mydb\",$db);

// display individual record
// 显示单条记录内容

if ($id) {

$result = mysql_query(\"SELECT * FROM employees WHERE id=$id\",$db);

$myrow = mysql_fetch_array($result);

printf(\"名: %s\n<>\", $myrow[\"first\"]);

printf(\"姓: %s\n<>\", $myrow[\"last\"]);

printf(\"住址: %s\n<>\", $myrow[\"address\"]);

printf(\"职位: %s\n<>\", $myrow[\"position\"]);

} else {

// show employee list
// 显示员工列表

$result = mysql_query(\"SELECT * FROM employees\",$db);

if ($myrow = mysql_fetch_array($result)) {

// display list if there are records to display
// 如果有记录,则显示列表

do {

printf(\"< href=\"%s?id=%s\">%s %s</a><>\n\", $PATH_INFO,
$myrow[\"id\"], $myrow[\"first\"], $myrow[\"last\"]);

} while ($myrow = mysql_fetch_array($result));

} else {

// no records to display
// 没有记录可显示

echo \"对不起,没有找到记录!\";

}

}

?>

</body>

</html>

  程序开始变得复杂了,所以我在这里面加了注释,来解释一下到底发生了什么。您可以用//加入单行注释,或者用/*和*/来括住大段的注释。

  到这里,我们已经学会了第一个真正有用的PHP/MySQL脚本程序!现在,我们要看看怎样把Web表格加进来,并且向数据库发送数据。


责任编辑:

收藏本文 打印 打印本文  推荐本文 告诉好友 投稿 投稿邮箱

站长排行

学院

新闻

专栏

盈利

[揭密网络黄链]中国留学生买凶专破日本
JSP语法(6)
超强弹出窗口代码,什么都挡不住
FLASH视觉特效实例之地震效果
贴吧发帖机使用教程(绝对原创)
关于数据分页(转自www.codeproject.co
ASP实现文件直接下载
Photoshop制作光感超酷效果水晶球
 遍历ASP.NET页面控件
永远的后门[经典]+查不出的后门
淘宝网卖家公然叫卖“艳照门”照片集
驳《百度Hi面世对腾讯有利》
Google绿色专家质疑黑色背景网页节省资
国内各IT企业办公环境揭秘(多图)
阿里妈妈广告卖主全攻略
站长创业源动力 主流站长站赏析
推荐阅读:80年小子的创业道理
Discuz!6.0猛将出击 最强论坛程序酷炫
我的网络,我的团队:专访李文明
百度新闻频道改版十天 流量止跌反弹翻
ECSHOP模板制作参考文档
悬挂阿里妈妈会否被百度惩罚
阿里妈妈是否是中小站长的救世主?
最强网店ECShop发新版 众多酷炫功能给
ECSHOP模板下载
土豆网,优酷网,爆米花等视频网站采集
DedeCms模板安装/制作概述
网上商店系统巅峰对决 ECShop vs ShopE
艰难的走在创业的路上 第一天
编程中国全站采集规则
性福联盟 一个不尊重站长的联盟
大脚:日赚100元—揭露最新firefox欺骗
大脚:垃圾站超级赚钱法之二—突破“站
大脚:垃圾站超级赚钱法之——前言
迅雷联盟、快车联盟收入对比
经理人必看的十个管理网站
Google Adsense的秘密 第二版
西联汇款兑付城市查询
不用SEO取得成功的10个步骤
关于做GOOGLE的五条经验
站长学院  网页设计 建站教程 图形图象 网络编程

Photoshop CS3
Photoshop CS3
不用Photoshop
不用Photoshop

DIV+CSS的开发方式 听听另外的
虚拟主机建站动易里快速生成的
VBScript特效代码 满屏幕乱跑
牛气!一个菜鸟站长的超强网站
创建、维护一个个人博客的“投
让网站流量稳步飙升的秘籍
网站推广的基本思想

新闻线索

如果你有站长界人事变动、重组并购、变革技术出现,以及产品投诉等重要新闻线索,请告诉我们,我们会给予特别关注。
0631-3653338
站长中国编辑部
站长中国24小时新闻热线: 13256307008