我有一个功能,可以检查用户是否在其角色中启用了特定功能。
function uar($role,$func,$pdo){
$id = '';
$id = $pdo->query("SELECT id FROM ruolo_funzione WHERE ruolo='$role' AND funzione='$func'")->fetchColumn();
if($id!=''){
return true;
}else{
return false;
}
}
如果我直接运行查询,则返回$ id,因此函数返回true。 在菜单页面中,我检查它是返回true还是false:
<?php if(uar($_SESSION['ruolo'],38,$pdo)){?>
<li class="subitem1">
<a href="index.php?area=soff&sub=home">Dashboard</a>
</li>
<?php } ?>
但它没有显示任何内容。我的代码出了什么问题?我错过了什么才能让它发挥作用?
编辑: 从mysql日志中,其中一个查询是:
SELECT id FROM ruolo_funzione WHERE ruolo='5' AND funzione='38'
返回id(已选中)但未评估为true
答案 0 :(得分:0)
public mixed PDOStatement::fetchColumn ([ int $column_number = 0 ] )
从结果集的下一行返回单个列,如果没有其他行,则返回FALSE。
诺塔:
PDOStatement :: fetchColumn()不应该用于检索布尔列,因为&gt;不可能将FALSE的值与不再存在的行进行区分&gt;检索。请改用PDOStatement :: fetch()。
因为它,如果你的查询没有返回任何行,它将返回false,
所以当你这样做的时候
if ($id!='')
当false != ''
返回false而不是true时,您会收到意外结果。
然后,您应该测试错误的值而不是 falsy 值......
$id !== false
请注意,请始终使用三个相等的比较器===
或!==
来阻止这些意外结果。
此外,您的查询必定有错误,因为它没有返回任何值。至少,它应该至少显示数据库中的功能。
验证你的$ _SESSION变量是否正确填充。
另外,请检查您的PDO查询是否正常运行。
尝试$pdo->errorInfo();
检查是否存在任何连接错误。