mysqli查询php函数内部检查userlevel

时间:2015-01-01 13:03:42

标签: php session mysqli

我正在尝试创建一个检查用户级别的函数。

function run_admin($userid, $username){

    global $dbcon;

    $stmt = $dbcon->prepare("SELECT userid, username, admin FROM user WHERE userid = ?");

    $stmt->bind_param('isi',$userid, $username, $admin);
    $userid = $_SESSION['userID'];

    $stmt->execute();
    $stmt->bind_result($userid,$username,$admin);

    $stmt->fetch();

   //if($admin >= 1){ echo $userid . " is admin!"; }
   // above prints "1 is admin!";

}

if(run_admin("1", "Mikkel") == "1")){ 
   echo "It's working, you are admin"; 
}

我已将该文件包含在$ dbcon中,并且正在处理另一页。从另一个问题mysqli/mysql query inside function not working开始,全局是一个想法,但我无法让它发挥作用。

我想使用该函数检查会话是否记录了userID和用户名。

admin行以整数返回。

我并不擅长mysqli准备好的陈述,仍在学习,但我不知道在哪里阅读。

任何人都可以帮助或引导我朝着正确的方向前进。

2 个答案:

答案 0 :(得分:0)

问题可能出在这些陈述中:

$stmt = $dbcon->prepare("SELECT userid, username, admin FROM user WHERE userid = ?");

$stmt->bind_param('isi',$userid, $username, $admin);

在第一个语句中,在您的查询中, userid 只有一个?,因此在第二个语句中,您只需要绑定一个值。所以声明将是:

$stmt->bind_param('i',$userid);

答案 1 :(得分:0)

以下是我如何压缩您的代码:

function is_admin($userid) {
    return
        db("SELECT admin FROM user WHERE userid = ?", $userid)
        ->admin;
}

if (is_admin("1")) { 
   echo "It's working, you are admin"; 
}

这是使用简单的db()/PDO wrapper。它可能不适合你。但只需选择 任何 数据库抽象方案。 - 当然你可以选择保持啰嗦mysqli。 (糟糕!)

重点是returning admin列。你的摘录并没有这样做。这就是if无效的原因。

在比较中也避免使用== "1"。您的数据库已经返回一个布尔值或整数。 PHP很容易在布尔上下文中对它进行评估,即使它以字符串形式返回。