簡體   English   中英

PHP if語句比較總是返回true

[英]PHP if statement comparison always returning true

我的if語句始終返回true,因此我無法追究這個問題。

$ currentMessageCount的值為42,lastMessageCount為41。

$result = $mysqli->query("SELECT message_count, last_seen
                          FROM message_counter 
                          WHERE match_id = '$i'");
$row = $result->fetch_assoc();
$currentMessageCount = (int)$row["message_count"];
$lastMessageCount = (int)$row["last_seen"];
$result->free();

if ($currentMessageCount > $lastMessageCount) {

    this code is running

} elseif ($currentMessageCount === $lastMessageCount) {

    this code is also running!!

}

編輯:

這是實際的代碼示例,按建議添加:

//loop through and check new messages for all matches
for($i = 1; $i <= $numMatches; $i++) {

$result = $mysqli->query("SELECT message_count, last_seen FROM message_counter WHERE match_id = '$i'");
        $row = $result->fetch_assoc();
        $currentMessageCount = (int)$row["message_count"];
        $lastMessageCount = (int)$row["last_seen"];
        //free memory
        $result->free();

        //if new messages - get them, else - skip
        if ($currentMessageCount > $lastMessageCount) {
            $newMessages = true;
            //get NEW messages for that match
            $result = $mysqli->query("  SELECT all_messages.* FROM all_messages
                                        WHERE match_id = '$i' 
                                        AND message_number > '$lastMessageCount'");

            //loop through all messages in table
            $j = 0;
            $allMessages = [];
            while ($row = $result->fetch_assoc()) {
                $dateTime = $row["date_time"];
                $messageNumber = $row["message_number"];
                $messageBody = $row["message_body"];
                $matchID = $i;
                $senderID = $row["sender_id"];

                //message array for each message
                $messageData = ["dateTime" => $dateTime,
                                "messageNumber" => $messageNumber,
                                "currentMessageCount" => $currentMessageCount,
                                "lastMessageCount" => $lastMessageCount,
                                "messageBody" => $messageBody,
                                "matchID" => $matchID,
                                "senderID" => $senderID];

                //put in another array for response
                $allMessages[$j] = $messageData;
                $j++;
            }
            //free memory
            $result->free();

            //put each message set into array for each user
            $allMatchMessages[$i-1] = $allMessages;

        } elseif ($currentMessageCount === $lastMessageCount) {
            $newMessages = false;
        }
    }

該代碼將同時返回充滿數據的$ messageData數組和newMessages = false

$newMessages會在外部for循環的每次迭代中覆蓋,並最終以最后一次迭代中分配的值結束。

該代碼將同時返回充滿數據的$messageData數組和$newMessages = false

對此的明顯解釋是$messageData由for循環的早期迭代填充,並且所有后續迭代(或至少最后一次迭代)都將$newMessages設置為false。

看起來您可能只需要消除elseif塊,並在for循環之前將$newMessages設置$newMessages false 實際上,甚至不需要$newMessages ,因為您可以在for循環結束后將$allMessages評估為布爾值。 (如果為空,它將計算為false,反之亦然。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM