if($num_rows === '0' OR $_GET['id'] !== $_SESSION['UserID'])
{ echo "show me something"; }
else
{ show nothing; }
我只是总是'什么也不显示'。
答案 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 }
再次感谢所有的帮助。 :)