OR运算符有点麻烦

时间:2014-08-25 14:04:44

标签: php

如果一个条件为真而另一个条件为假,则使用OR会遇到一些麻烦。 在我现在的灌输中,它始终只是第二个条件标记。

if($num_rows === '0' OR $_GET['id'] !== $_SESSION['UserID']) 
{ echo "show me something"; }
else
{ show nothing; }

我只是总是'什么也不显示'。

5 个答案:

答案 0 :(得分:2)

请注意===是严格的比较。我想以下几点:

$num_rows === '0'

应该是:

$num_rows == 0

$num_rows可能是一个整数,而不是一个字符串(一段文字)。

相关:Stack Overflow上的PHP == vs ===

注意第二个比较:

$_GET['id'] !== $_SESSION['UserID']

此处,使用!=支持!==可能更好。 $_GET通常被视为字符串,因此即使像?id=5这样的内容也会返回string "5"而不是integer 5

这是一个快速测试来说明:

if (isset($_GET['id'])) {
    echo '<h2>Comparison with == 5</h2>';
    var_dump( ($_GET['id'] == 5) );
    echo '<h2>Comparison with == "5"</h2>';
    var_dump( ($_GET['id'] == "5") );
    echo '<h2>Comparison with === 5</h2>';
    var_dump( ($_GET['id'] === 5) );
    echo '<h2>Comparison with === "5"</h2>';
    var_dump( ($_GET['id'] === "5") );
}
else {
    echo 'Please set an ?id to test';
}

这将使用?id=5输出(注意第三项是 false )以下内容:

  

与== 5

进行比较      

布尔值为真

     

与==&#34; 5&#34;

进行比较      

布尔值为真

     

与=== 5比较

     

布尔值假

     

与===&#34; 5&#34;

进行比较      

布尔值为真

答案 1 :(得分:1)

可能是因为你对字符串使用绝对相等。Mysli_num_rows返回一个int。

http://php.net/manual/en/language.operators.comparison.php

  

等同且类型相同

答案 2 :(得分:1)

你不需要使用===,因为它是一个严格的比较而且$num_rows可能是int试试这个: -

if($num_rows == 0 OR $_GET['id'] != $_SESSION['UserID']) 

$_GET['id']会为您提供一个字符串。您可以填写 manual 了解详情

答案 3 :(得分:0)

要真的正确,需要这样的事情:

if ($num_rows === FALSE)  {
    echo 'db resource/link gone';
}
elseif ($num_rows === 0 || intval($_GET['id']) !== intval($_SESSION['UserID'])) {
    echo 'no db result or id mismatch';
}
elseif (intval($num_rows) > 0 && intval($_GET['id']) === intval($_SESSION['UserID'])) {
    echo 'everything good';
}
else {
    echo 'something unhandled went wrong';
}

答案 4 :(得分:0)

感谢所有答案。我得到了它的工作。我将订单和操作符更改为您的建议。

我这样做了:

if($num_rows > 0 OR $_GET['id'] == $_SESSION['UserID']) { echo "show nothing"; }
else { show me some      stuff }

再次感谢所有的帮助。 :)