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 中的 AND CAST 转换为 BOOL 和“整数”

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

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

我已经阅读了PHP 类型比较表PHP 类型杂耍以及手册的所有其他相关部分if(), while(), mysqli_fetch_array()等,但我自己无法解决这个问题。

我仍在学习 PHP,我确信这是一个简单的解决方法,但我只是看不到它。

4

4 回答 4

1

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

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

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

if($temp == $a){
于 2013-07-26T01:41:19.337 回答
1

while 语句退出,因为$result变为false。所以,当你调用 $result["live"] 时,它已经变成了false

您可以通过发出简单的验证


var_dump($result);

就在条件语句之前。

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

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

于 2013-07-26T01:42:56.487 回答
0

while 循环将重复并在每次循环中将 $result 设置为 mysqli_fetch_assoc() 的值。当 mysqli_fetch_assoc() 中没有更多结果时,它返回 false。因此,在您尝试评估它时,您的 $result === false 。在 PHP 中回显 false 不会输出任何内容。回显 !false 输出 1。

于 2013-07-26T01:45:02.423 回答
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
}
于 2013-07-26T01:49:36.390 回答