【问题标题】:Mysqli query inside php function to check userlevelMysqli 在 php 函数中查询以检查用户级别
【发布时间】:2015-02-28 03:06:08
【问题描述】:

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

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 中的一个想法,但我无法让它发挥作用。

我想用这个函数来检查会话是否登录了用户ID和用户名。

管理行返回整数。

我不太擅长 mysqli 准备好的语句,还在学习,但我不知道从哪里读到。

谁能帮助或指导我正确的方向。

【问题讨论】:

  • 您不想收到错误消息之类的吗?您绑定了太多未使用的参数。在与 mysqli 纠缠不清之前阅读 PDO。
  • 抱歉。它应该是 bind_param('i', $userid) 在 where 子句中的 userid 。我刚刚从测试中粘贴了很多内容。
  • 天哪,它正在工作..我刚刚从另一个我可以使用的 q 中读到; ini_set('error_reporting', E_ALL);查看错误消息。

标签: php session mysqli


【解决方案1】:

问题可能出在以下语句中:

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

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

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

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

【讨论】:

  • 谢谢,我知道了。看看我对 Q 的评论。我从我的测试中粘贴了太多.. :( 查询没有问题,我的问题是如何使函数以探测方式工作:-)
【解决方案2】:

我会这样压缩你的代码:

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 也非常适合在布尔上下文中对其进行评估。

【讨论】:

  • 非常好的评论。谢谢 :-) 但学习 mysqli 的工作原理对我来说比使用快捷方式更重要.. 至少在开始时 :)
  • 详细学习东西显然是件好事。然而,Mysqli 是在浪费时间,而且经常是 IMO 的新手陷阱。没有人将它用于新项目。整个 PHP 社区已经决定采用 PDO。
猜你喜欢
  • 2013-04-07
  • 2023-03-31
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多