0

下午,

我在这里有一个函数,如果没有用户具有管理员角色的记录,我试图返回一个简单的值 0,如果有,则返回 1。命令行 SQL 工作得非常好,但是当通过页面运行它时,它总是返回一个值 4,这是表中的记录数。

完全糊涂了,看了这么久,有什么想法吗?正如我所说,直接在 mysql 中运行时的查询返回正确,所以我不确定为什么它每次都返回 4。

提前致谢。

    function userHasRole($role)
    {
include '../includes/db-connect.inc.php';
echo $_SESSION['username'];
try
{
    $sql = "SELECT count(*) FROM users
        INNER JOIN userrole ON users.id = userid 
        INNER JOIN role ON roleid = role.id;
        WHERE username = :username AND role.id = :roleId";

    $s = $PDO->prepare($sql);
    $s->bindValue(':username', $_SESSION['username']);
    $s->bindValue(':roleId', $role);
    $s->execute();
}
catch (PDOException $e)
{
    $error = 'Error searching for author roles.';
    echo $error;
    exit();
}


$row = $s->fetch();
if ($row[0] > 0)
{
    return TRUE;
}
else
{
    return FALSE;
}

}
4

1 回答 1

0

您有一个不需要的分号 - 在第二个内部连接之后。摆脱它,然后再试一次。我认为 WHERE 子句完全被忽略了。

$sql = "SELECT count(*) FROM users
        INNER JOIN userrole ON users.id = userid 
        INNER JOIN role ON roleid = role.id;
        WHERE username = :username AND role.id = :roleId";

对不起,我应该马上注意到的。它可能不会抛出错误,因为 PHP 甚至不允许您运行多个 SQL 语句,这只是为了防止 SQL 注入。所以分号之后的所有内容都被忽略了。

于 2013-09-28T16:30:34.487 回答