我正在尝试创建一个检查用户级别的函数。
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准备好的陈述,仍在学习,但我不知道在哪里阅读。
任何人都可以帮助或引导我朝着正确的方向前进。
答案 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
。 (糟糕!)
重点是return
ing admin
列。你的摘录并没有这样做。这就是if
无效的原因。
在比较中也避免使用== "1"
。您的数据库已经返回一个布尔值或整数。 PHP很容易在布尔上下文中对它进行评估,即使它以字符串形式返回。