2013-11-25 234 views
3

我一直坐在這個問題的最後一個小時。我有兩個if語句(用於測試它們都是IF語句,而不是IF-ELSE和IF語句的代碼運行的假IF語句,如果它是真實的 代碼:PHP - IF語句錯誤,仍然運行

<?php 
$sth = $pdo->query("SELECT * FROM myDBTable WHERE alien1='$idkod' OR alien2='$idkod'"); 
$result = $sth->fetchAll(); 
if(!$result) 
{ 
    echo "No data"; 
} 
else 
{ 
    foreach($result as $row) 
    { 
     $alien1 = $row['alien1']; 
     $alien2 = $row['alien2']; 
     if($idkod == $alien1) 
     { 
      echo $idkod . "==" . $alien1; 
     } 
     if($idkod == $alien2) 
     { 
      echo $idkod . "==" . $alien2; 
     } 
    } 
} 
?> 

這將使我在屏幕上顯示以下文字: 1234567891234567891234567 == 1234567891234567891234567 1234567891234567891234567 == 1234567891234567891234568

顯然,第二個文本不應該出現,因爲說法不屬實

+0

作爲第一步,我會嘗試使用===。 – SBI

+1

什麼類型是$ idkod?它聞起來像一些類型的魔法。你有沒有嘗試過這麼多*較小的數字或字符串值? –

回答

7

在製作條件分支時不要假設任何東西,對變量使用var_dump()來暫時查看它們 - 這樣你最好決定如何檢查你所期望的確切類型和價值。

然後前面已經說了,寧願如果採取這種行爲,你將節省無數的時間和避免一些可能出現的代碼非常微妙的錯誤檢查使用===

PHP Truth Table固定一段時間將有所幫助。

+0

我只是var_dumped每個變量,他們都是字符串(25)。我感謝你的回答,我將從這裏使用===。 –

+0

事實上,在給定的鏈接(PHP Truth表格)中,它顯示了「php at richardneill dot org」的註釋,它解釋了這個確切的問題! +1 –

2

它。錯誤使用==您需要使用===第二個是值比較,第一個是對象比較(取決於上下文)

+1

但是數值已經不一樣了:'1234567891234567891234567!= 1234567891234567891234568' – matewka

+0

哈?我剛剛說過,你忽略了** == **和** ===不一樣**它具有不同的含義和PHP內部的處理。使用** === ** – nrathaus

7

==當測試相等時忽略類型。在這種情況下,它會假定這兩個字符串都是數字並將其轉換。這意味着,這將變成:

9223372036854775807 == 9223372036854775807 //Max int val. Will be different on different systems. 

===將確保這兩種觀點都是同一類型的,並不會試圖強迫讓

'1234567891234567891234567' === '1234567891234567891234568'; 

得到所需要的結果。

PHP平等有時候很古怪。

+0

現在我明白爲什麼代碼執行它的功能。謝謝! –

+0

沒問題,很高興我可以幫忙。 – Jim

0

我已經修改了你的代碼一點點檢查

<?php 
$sth = $pdo->query("SELECT * FROM myDBTable WHERE alien1='$idkod' OR alien2='$idkod'"); 
$result = $sth->fetchAll(); 
if(!$result) 
{ 
echo "No data"; 
} 
    else 
    { 
    foreach($result as $row) 
    { 
     $alien1 = $row['alien1']; 
     $alien2 = $row['alien2']; 
    if($idkod == $alien1 && $idkod != $alien2) 
    { 
     echo $idkod . "==" . $alien1; 
    } 

     if($idkod == $alien2 && $idkod != $alien1) 
     { 
     echo $idkod . "==" . $alien2; 
     } 
    } 
    } 
?> 
+0

** == **只是明顯錯誤的使用,不要這樣做 – nrathaus