2013-11-25 205 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