2011-11-16 43 views
1

我有一組數據庫結果,其中一些列有空字段。我運行此查詢:奇怪的結果使用PHP while循環運行在mysql_fetch_array()

SELECT * FROM `data` WHERE category = '$category' ORDER BY name 

多數民衆贊成輸出結果的PHP是這樣的(大大簡化版本):

while ($qValues = mysql_fetch_array($result)) { 
    if ($qValues["licence"] != "") { 
     $lice = 'Licence: ' . $qValues["licence"]; 
    } 
    if ($qValues["publisher"] != "") { 
     $pub = 'Publisher: ' . $qValues["publisher"]; 
    } 
} 

發生了什麼事時,上一行是否有出版商,但目前行沒有發佈者(不爲空,空字符串)它正在輸出前一行的數據。

我不知道這是怎麼發生的,因爲在我看來,mysql_fetch_array有一個網格中的數據,while循環將其內部計數器逐行推進。我不明白如果一行數據可能流入下一行,如果該行包含空字符串。

這裏發生了什麼?

+2

@i_Conica如果我想查看「食物N」物品類別中的所有數據,該怎麼辦? –

+0

邁克B,我不明白你的問題?我的問題是,如果循環的新迭代包含一個新的字符串,如果它包含一個空字符串,它仍然存儲以前的迭代(數據庫行)的數據,則該循環的新迭代只覆蓋前一個循環的數據。 –

+0

@ i-CONICA,如果它有單引號,你會希望避開該類別。 –

回答

2

由於您只設置變量,如果列中有值,當列爲空時變量不會重置。這會導致您看到上一條記錄中的值的問題。

您應該每次設置變量,即使列是空白的。您可以使用else報表:

while ($qValues = mysql_fetch_array($result)) { 
if ($qValues["licence"] != "") { 
    $lice = 'Licence: ' . $qValues["licence"]; 
} else { 
    // Set to blank so as not to keep value from last iteration 
    $lice = ""; 
} 
if ($qValues["publisher"] != "") { 
    $pub = 'Publisher: ' . $qValues["publisher"]; 
} else { 
    // Set to blank so as not to keep value from last iteration 
    $pub = ""; 
} 
1

您不會在每次迭代中重置變量,因此您會看到舊值。爲了解決這個問題,你可以做,例如這樣做:

if ($qValues["licence"] != "") { 
    $lice = 'Licence: ' . $qValues["licence"]; 
} else { 
    $lice = ''; 
} 
1

你是出版商和許可的值賦給一個PHP變量。如果MySQL結果包含一個空字符串仍然將保持前一行 取消設置2個變量的內容每次遍歷結果:

while ($qValues = mysql_fetch_array($result)) { 
$lice = $pub = ""; 
if ($qValues["licence"] != "") { 
    $lice = 'Licence: ' . $qValues["licence"]; 
} 
if ($qValues["publisher"] != "") { 
    $pub = 'Publisher: ' . $qValues["publisher"]; 
} 
} 
2

每次重置$pub$pub = ""通過環...

while ($qValues = mysql_fetch_array($result)) { 
    $lice = ""; 
    $pub = ""; 

    if ($qValues["licence"] != "") { 
     $lice = 'Licence: ' . $qValues["licence"]; 
    } 
    if ($qValues["publisher"] != "") { 
     $pub = 'Publisher: ' . $qValues["publisher"]; 
    } 
} 
+1

我認爲這是一個更好的解決方案,然後如果/其他。初始化變量是應該遵循的一個好習慣。 –

+1

@Truth,你說服了我。更容易閱讀。 –