if语句未按预期评估

时间:2013-07-26 01:36:20

标签: php mysql

在下面的代码中,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中的AND CAST到BOOL和'整数'

更改运算符,例如=,==,===并且还尝试输入if()而不是传入$ a,如图所示

AND $result = $result['LIVE'];并传入$ result。

我已阅读PHP type comparison tablesPHP type juggling以及手册if(), while(), mysqli_fetch_array()等所有其他相关部分,但我自己无法解决此问题。

我还在学习PHP,我确信这是一个简单的修复,但我看不到它。

4 个答案:

答案 0 :(得分:1)

您没有保存$result的值;在while循环$result的最后一次迭代期间,将设置为false,因为没有更多的行要遍历。这也是触发退出while循环的原因。

您需要将值设置为另一个临时变量。

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

if($temp == $a){

答案 1 :(得分:1)

while语句退出,因为 $ result 变为 false 。因此,当您调用$ result [“live”]时,它已经变为 false

您只需通过发出验证即可


var_dump($result);

就在条件陈述之前。

要确保 $ a = 1 ,您必须在循环内发出该语句。
这将解决您的问题。

希望这个解释清楚,这有帮助。

答案 2 :(得分:0)

while循环将重复并在每次循环时将$ result设置为mysqli_fetch_assoc()的值。当mysqli_fetch_assoc()中没有更多结果时,它返回false。因此,在您尝试评估它时,$ result === false。在PHP中回显false输出什么都没有。回应!错误输出1.

答案 3 :(得分: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
}