LAMP架构的网站
,我以前注重的多是安装/配置方面的
,讲述开发的相对较少,因为自己从事开发也少
。本文的原文当然也来自:
PublishedonTheO'ReillyNetwork(http://www.oreillynet.com/)
http://www.oreillynet.com/pub/a/onlamp/2002/04/04/webdb.html
看了以后,颇有启发,以前开发中遇到的一些问题,迎刃而解
。所以翻译出来和大家共享。
1.
PHP中数组的使用
在操作数据库时,使用关联数组(associatively-indexedarrays)十分有帮助,下面我们看一个基本的数字格式的数组遍历:
$temp[0]="richmond";$temp[1]="tigers";$temp[2]="premiers";for($x=0;$x{echo$temp[$x];echo"";}?>
然而另外一种更加节省代码的方式是:
$temp=array("richmond","tigers","premiers");
foreach($tempas$element)
echo"$element";
?>
foreach还能输出文字下标:
$temp=array("club"=>"richmond","nickname"=>"tigers","aim"=>"premiers");foreach($tempas$key=>$value)echo"$key:$value";?>
PHP手册中描述了大约50个用于处理数组的函数。
2.在PHP字符串中加入变量
这个很简单的:
$temp="hello"echo"$tempworld";?>
但是需要说明的是,尽管下面的例子没有错误:
$temp=array("one"=>1,"two"=>2);//输出::Thefirstelementis1echo"Thefirstelementis$temp[one].";?>
但是如果后面那个echo语句没有双引号引起来的话,就要报错,因此建议使用花括号:
$temp=array("one"=>1,"two"=>2);echo"Thefirstelementis.";?>
3.采用关联数组存取查询结果
看下面的例子:
$connection=
mysql_connect("localhost","albert","shhh");
mysql_select_db("winestore",$connection);$result=mysql_query("SELECTcust_id,surname,firstnameFROMcustomer",$connection);while($row=mysql_fetch_array($result)){echo"ID:tn";echo"Surnametn";echo"Firstname:tnn";}?>
函数mysql_fetch_array()把查询结果的一行放入数组,可以同时用两种方式引用,例如cust_id可以同时用下面两种方式:$row["cust_id"]或者$row[0]。显然,前者的可读性要比后者好多了。
在多表连查中,如果两个列名字一样,最好用别名分开:
SELECTwinery.nameASwname,region.nameASrname,FROMwinery,regionWHEREwinery.region_id=region.region_id;
列名的引用为:$row["wname"]和$row["rname"]。
在指定表名和列名的情况下,只引用列名:
SELECTwinery.region_id
FROMwinery
列名的引用为:$row["region_id"]。
聚集函数的引用就是引用名:
SELECTcount(*)
FROMcustomer;
列名的引用为:$row["count(*)"]。
4.注意常见的PHPbug
常见的PHP纠错问题是:
NopagerenderedbytheWebbrowserwhenmuchmoreisexpectedApop-updialogstatingthatthe"DocumentContainsNoData"Apartialpagewhenmoreisexpected
出现这些情况的大多数原因并不在于脚本的逻辑,而是HTML中存在的bug或者脚本生成的HTML的bug。例如缺少类似
,,之类的关闭Tag,页面就不能刷新。解决这个问题的办法就是,查看HTML的源代码。
对于复杂的,不能查到原因的页面,可以通过W3C的页面校验程序http://validator.w3.org/来分析。
如果没有定义变量,或者变量定义错误也会让程序变得古怪。例如下面的死循环:
for($counter=0;$counter<10;$Counter++)myFunction();?>
变量$Counter在增加,而$counter永远小于10。这类错误一般都能通过设置较高的错误报告级别来找到:
error_reporting(E_ALL);for($counter=0;$counter<10;$Counter++)myFunction();?>