我一直坐在这个问题的最后一个小时。我有两个if语句(出于测试目的,它们都是IF语句,而不是IF和ELSE IF语句。代码运行错误的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 :(得分:7)
在制作条件分叉时不要假设任何东西,在变量上使用var_dump()来暂时查看它们 - 这样你最好决定如何检查你期望的确切类型和值。
然后如上所述,更喜欢使用===
进行检查如果你采用这种行为,你将节省无数小时,并避免一些可能出现在你的代码中的微妙错误。
将PHP Truth Table固定一段时间会有所帮助。
答案 1 :(得分:7)
==
会忽略类型。在这种情况下,它将假设两个字符串都是数字并转换它们。这意味着这将转变为:
9223372036854775807 == 9223372036854775807 //Max int val. Will be different on different systems.
===
将确保两个参数都是相同类型,并且不会尝试强制制作
'1234567891234567891234567' === '1234567891234567891234568';
给出预期的结果。
PHP平等有时是古怪的。
答案 2 :(得分:2)
使用==
你需要使用===
是错误的第二个是值比较,第一个是对象比较(取决于上下文)
答案 3 :(得分: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;
}
}
}
?>