接下来,我们就可以对数据库进行查询。不过,很多时候,当我们运行编写好的查询语句时,却得不到任何返回数据。到底是什么地方出错了呢?最好的解决方法是把SQL语句赋予一个变量,例如:
<?
....
$SQL="SELECT * FROM $TableName WHERE $ColumnName > $Limit";
$Result_ID=mysql_query($QUERY);
...?>
然后当出现问题时,使用“print”或“echo”命令显示该语句。注意检查$ColumnName和$Limit的拼写是否正确,是否无意当中创建了新的变量。使用输出显示的方法可以很容易的找到并解决拼写错误的问题。但是如果我们将SQL语句显示出来之后仍然没有找到明显的错误该怎么办呢?这里我们可以把输出的语句粘贴到象Mysql命令行接口这样的命令行工具中,看一看是否能够返回数据。如果还是无法解决问题,就应该查看一下所使用帐号的用户权限。
如今,我们可以使用许多免费提供的类完成绝大部分的数据库操作。PHP Classes(http://phpclasses.upperdesign.com/)上就有许多相关的信息,可以供有兴趣的用户参考。其中, MetaBase能够提供不依赖某种数据库系统的查询和管理。如果用户正在同时使用几种不同的数据库系统,或者希望自己的程序能够移植到其它的数据库平台上的话,可以留意一下MetaBase的使用。
注意事项最后,我们把使用PHP进行编程的过程中所应当注意的一些问题进行一下汇总,希望能够对大家有所帮助。
1.检查(),[],以及{}等符号,看看是否成对出现。
2.检查字符串,注意如果要想在“”当中再使用“”的话,必须使用转义符“\”。
3.检查保留关键字的拼写是否正确。例如,myslq_num_rows()应当改为mysql_num_rows。
4.对照PHP用户手册(www.php.net/manual),检查程序的语法是否正确。
5.如果在函数中使用全局变量,一定不要忘了进行变量声明。
6.如果希望使用setCookie()函数设置Cookie信息,一定要确保在此之前没有输出任何字符,包括在“<?”或“<?php”之前不能有任何空格。“<?”必须作为程序的第一行。
7.如果数据库查询操作失败,使用echo或print写出查询语句,检查语法是否正确,特别应当注意语句中出现的变量。
8.如果SQL语句没有明显问题,可以尝试着使用数据库系统所提供的命令行接口。
9.如果问题仍然没有解决,应当检查是否具有足够的数据库访问权限。
10.如果出现“can’t redeclare foo()”错误,表明用户可能把同一个文件引用了两次。可以使用include_once()函数避免出现这一问题。
11.注意区分大小写。例如,$Foo和$FOO是两个不同的变量。
12.注意数组的正确使用格式。例如:$this->$foo()和$this->$variable应当分别改为$this->foo()和$this->variable。
分号的使用正象我们平时写文章时必须要在每一句话的结尾处加上句号一样,PHP要求程序中的每一条语句都必须使用分号“;”结束。这是一条最基本的语法规则,但是同时也最容易出现问题。我们在编写程序时,很少会一行一行的检查是否漏掉了分号,但是一旦出现任何一处疏忽,解析程序就回立刻发出错误报告。有时,报告中可能会包含出现问题的语句行数。
<?
$Output="Hello World";
echo $Output
$Other="Blah";
print $SomeMoreText;
?>
上述代码的第二行“echo $Output”的结尾处我们漏掉了一个分号,如果执行该脚本将会产生如下错误提示:
Parse error: parse error, expecting `’,’’ or `’;’’ in /usr/local/apache/htdocs/test.php on line 8报告虽然指出了出现错误的原因,即漏掉了逗号“,”或分号“;”,但是却将出现问题的语句定在了第八行。因为这段代码非常简单,我们很容易就可以找到真正出现错误的地方。但是,如果程序非常复杂时,要想顺利的找出错误就有些困难了。
根据笔者以往的经验,建议采用以下方法:
如果当错误报告中指出的语句没有明显的问题时,可以检查位于该语句之前的其它指令行(不包括注释行)是否正确。如果仍然没有找到错误,可以将报告中指出的语句行注释掉(在该语句行的最前面加上“//”或“#”注释符号)或者改为用户能够确保完全没有问题的其它语句。之后,重新运行程序,如果错误提示仍然指向同一行,就表明真正有问题的语句应当位于被注释掉的语句行的前面。按照上述方法逐一检查位置靠前的每一行指令,直到错误提示信息发生改变。这时,我们就成功的挖出了真正的罪魁祸首。
变量的问题与其它编程语言要求用户显式声明变量不同,PHP语言允许用户自动使用所有变量而不必进行事先的声明。变量名称的拼写错误成为困扰PHP用户的一个大问题。
<?
function Combine ($FirstHalf, $SecondHalf)
{
$Combined_String=$FirstHalf.$SecondHalf;
return $Combined_String;
}
$FirstString="WDVL - ";
$SecondString="Illustrated Encyclopedia";
$Combine_Result=Combine ($FirstString, $SecondString);
print $Combined_Result;
?>
当我们运行以上脚本时,将会看到由于程序没有返回任何数据而出现的错误提示。这里,我们为了更好的说明问题选择了一个非常直观的例子。在现实当中,有时问题并不会这么简单。相信大家都已经找到了出现问题的原因,那就是“print $Combined_Result;”中的变量名称“$Combined_Result”应当改为“$Combine_Result”。
事实上,脚本中任何一处出现的拼写错误都会导致同样的问题。如果用户怀疑自己的程序中有拼写错误的话,一个非常好的检查方法就是在变量的前后显示文字信息。例如:
print “The Combined Result is: |”.$Combined_Result.“|”;
按照上述方法替换输出语句的脚本重新执行之后的结果如下:
The Combined Result is: ||
其中,在两个管道符号“|”之间没有任何内容。按照这种方法,我们就可以在程序中找到出现问题的变量。
下面,我们再举一个更加复杂的例子进行说明。
现在,很多网络应用都需要对用户的身份进行验证。一个最简单的实现脚本可以如下:
<?
$Password=“Secret”;
$Name=“admin”;
function VerifyPassword ($UserPassword, $UserName){
if ($Password=$UserPassword && $Name=$UserName){
return 1;
}
else { return 0;}
}
if (VerifyPassword (“foo1ish”,“admin”)){
print “The Password is correct”;
}
else {
print “I’m sorry, the password is incorrect”;
}
?>