如何修复由if语句引起的奇怪的PHP/MySQL问题?
问题描述:
我是PHP/mySql的初学者。我正在写一个CMS,但仍处于早期阶段。 我编写了一个代码,用于从mySql表中获取信息,并将其转换为HTML表格。问题是,在应用某个IF语句之前,mySql表中的所有数据都会显示出来,这正是我想要的......但是,在应用IF语句之后,部分数据简单地消失了! (第一个原始的具体)..所以这里是我的代码,将有效地为您诊断我的问题..如果你需要额外的片断告诉我。如何修复由if语句引起的奇怪的PHP/MySQL问题?
首先,这里是我的HTML表之前将IF语句:
而这里的AFTER:
这里是我的代码,而IF语句:
<?php
function make_table() {
$myResult = get_ind_info_fam();
$ind_field_count = mysql_num_fields($myResult) -1;
// Table to show ALL individuals info.
echo "<table>" ;
// Table Headers:
for ($i = 2 ; $i <= $ind_field_count ; $i++) {
$field_name = mysql_field_name($myResult, $i);
$field_name = ucwords($field_name);
if ($i ==2) {
$field_name = "Individual Name";
}
echo "<th>{$field_name}</th>";
}
// Table Data :
while ($myData = mysql_fetch_array($myResult)){
echo "<tr>";
for ($i = 2 ; $i <= $ind_field_count ; $i++) {
echo "<td>{$myData[$i]}</td>";
}
echo "</tr>";
}
echo "</table>" ;
}
?>
并与IF语句代码:
<?php
function make_table() {
$myResult = get_ind_info_fam();
// Checking if a correct $_GET["fam"] is entered
// (not out of range) so an empty table won't be shown :
if (isset($myResult)) {
if($myData = mysql_fetch_array($myResult)) {
$ind_field_count = mysql_num_fields($myResult) -1;
// Table to show ALL individuals info.
echo "<table>" ;
// Table Headers:
for ($i = 2 ; $i <= $ind_field_count ; $i++) {
$field_name = mysql_field_name($myResult, $i);
$field_name = ucwords($field_name);
if ($i ==2) {
$field_name = "Individual Name";
}
echo "<th>{$field_name}</th>";
}
// Table Data :
while ($myData = mysql_fetch_array($myResult)){
echo "<tr>";
for ($i = 2 ; $i <= $ind_field_count ; $i++) {
echo "<td>{$myData[$i]}</td>";
}
echo "</tr>";
}
echo "</table>" ;
}
}
}
?>
这是我get_ind_info_fam()
功能:
function get_ind_info_fam()
{
//****Family name is clicked*****
//This function gets Family ID from addresse bar
//and extract individual info according to that ID by $_GET variable
//
//NOTE : this function is used in the article to show content of
// selected family name.
if(is_numeric($_GET["fam"])) {
$query ="SELECT * FROM individual
WHERE g_id={$_GET["fam"]}";
$result = mysql_query($query);
return $result ;
}
}
我真的不知道到底该怎么告诉你得到完整的图片,但如果有任何不够清楚的事情都会让我知道。
答
你与if()
版本获取在两个地方的数据行:
if($myData = mysql_fetch_array($myResult)) {
和
while ($myData = mysql_fetch_array($myResult)){
第一行扔掉,因为你只要输出表头行不每输出一行数据。
此外,您的初始isset()
检查不会做你想做的。无论查询如何执行,mysql_query()
都会返回SOMETHING。如果失败,你会得到一个布尔值FALSE,否则你会得到一个结果集句柄。这意味着isset()
将永远成功,因为这个价值永远是(大惊喜)。你想要的是:
$myResult = get_ind_info_fam();
if ($myResult === FALSE) {
die(mysql_error());
}
if (mysql_num_rows($myResult) == 0) {
echo "nothing found";
} else {
.... print out the results ...
}
答
你没有这个在一个没有IF:
if($myData = mysql_fetch_array($myResult)) {
仅供参考,您的if语句后立即检查。
答
It's你的第二个if
声明:您获取结果的第一行,并您鸵鸟政策对它做任何事以后,所以当你进入它消失while
循环并获得第二行。
It's这一行:
if($myData = mysql_fetch_array($myResult)) {
真正帮助我,谢谢:) – rafael 2011-04-13 19:05:15