检查是否失败。返回true但不评估

时间:2016-02-22 18:30:03

标签: php

我有一个功能,可以检查用户是否在其角色中启用了特定功能。

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

1 个答案:

答案 0 :(得分:0)

来自PDO文档

  

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

请注意,请始终使用三个相等的比较器===!==来阻止这些意外结果。

UPDATE:

此外,您的查询必定有错误,因为它没有返回任何值。至少,它应该至少显示数据库中的功能。

UPDATE2:

验证你的$ _SESSION变量是否正确填充。

另外,请检查您的PDO查询是否正常运行。

尝试$pdo->errorInfo();检查是否存在任何连接错误。