2013-07-26 56 views
0

在下面的代碼中,if語句被評估爲FALSE,我認爲它應該爲TRUE。 我誤解了什麼?如果語句未按預期進行評估

$sql = "SELECT * FROM LIVE";  
$res = mysqli_query($con, $sql); 
while ($result = mysqli_fetch_assoc ($res)){ 
var_dump($result['LIVE']); //string '1' (length=1) 
echo $result['LIVE']. "<br>"; //1 
} 
$a = "1"; 

if($result['LIVE'] == $a){ 
echo "It is live!"; 
} 
else { 
echo "not live!"; //this gets echoed 
} 

我已經嘗試了引號的所有變體」,」沒有引號

並改變在MySQL表到BIT列中的數據和數據類型,CHAR,INT

,並投中PHP爲BOOL和「整數」

並改變操作者例如=,==,===和還試圖只輸入到如果()而不是傳遞在$ a所示

甲ND $result = $result['LIVE'];並傳入$ result。

我已閱讀PHP type comparison tablesPHP type juggling以及手冊if(), while(), mysqli_fetch_array()等的所有其他相關部分,無法自己解決此問題。

我還在學習PHP,我相信這是一個簡單的修復,但我只是看不到它。

+0

在php中使用'=='會嚇到我。我很少用它 – binnyb

回答

1

您未保存價值$result;在最後迭代while循環$result將被設置爲false,因爲沒有更多行要遍歷。這也是觸發器退出while循環的原因。

您需要將您的值設置爲另一個臨時變量。

while ($result = mysqli_fetch_assoc ($res)){ 
$temp = $result['LIVE']; //1 
} 
$a = "1"; 

if($temp == $a){ 
+0

謝謝!這有所幫助 – rosscosack

1

while語句退出,因爲$導致成爲。因此,當您調用$ result [「live」]時,它已經變爲false

您可以簡單地在條件語句之前發佈

 

var_dump($result); 
 
進行驗證。

爲確保 $ a = 1,您必須在循環內發出該語句。
這將解決您的問題。

希望這個解釋是明確的,這有助於。

0

while循環將重複並每次通過循環將$ result設置爲mysqli_fetch_assoc()的值。當mysqli_fetch_assoc()中沒有更多結果時,它將返回false。因此,您試圖評估它時,您的$ result === false。在PHP中回覆false將不會輸出任何內容。回聲!假輸出1.

0
$result = ""; 

$sql = "SELECT * FROM LIVE";  
$res = mysqli_query($con, $sql);` 
while ($result = mysqli_fetch_assoc ($res)){ 
$result = $result['LIVE']; 
echo $result['LIVE']. "<br>"; //1 
} 
$a = "1"; 

if($result == $a){ 
echo "It is live!"; 
} 
else { 
echo "not live!"; //this gets echoed 
}