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

必要のないセミコロンがあります -- 2 番目の内部結合の後。それを取り除き、もう一度やり直してください。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 に答える