mysqli_num_rows没有显示期望的结果

时间:2019-04-06 17:15:05

标签: php mysqli

我的数据库中有一个“用户”表(目前有4个用户),其中包含不同的角色(1 =用户,2 =管理员,3 =主持人)。我只想向管理员和主持人显示我的php脚本的某些行,因此我进行了以下查询: (我知道这是不安全的)

$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
$stuff = 'SELECT * FROM `users` WHERE role > 0';
$result = mysqli_query($conn, $stuff);

此查询列出了角色超过0的所有用户。

require_once('link_to_script.php');
if (mysqli_num_rows($result) >1){
echo "Admin area";
}else{
echo "No Permissions";
}

这应该是自我解释(仅向角色高于1的用户显示“管理区域”)

我不知道我的错误是什么,我希望有人可以帮助我一点:)

3 个答案:

答案 0 :(得分:0)

您可以在SQL查询中使用IN,例如,如果您需要管理员和主持人,请使用以下内容

 SELECT * FROM `users` WHERE role IN ('2','3')

mysqli_num_rows 返回结果集中的行数。

if (mysqli_num_rows($result)){
   echo "Admin and moderator area";
}else{
  echo "No Permissions";
}

答案 1 :(得分:0)

您说的是要多于1行,您可能想说多于0行或仅1行...

if (mysqli_num_rows($result) >1){

应该是

if (mysqli_num_rows($result) >0){

if (mysqli_num_rows($result) == 1){

对于我知道这是不安全的-由于没有绑定参数,因此SQL不受任何输入的影响,因此在这种情况下安全性没有问题。但是您可能会希望在某个时候添加登录用户,这应该使用准备好的语句来完成。

答案 2 :(得分:0)

我现在通过以下方式获取当前用户:

$userID = $page->users->currentUserId();
$stuff = 'SELECT role FROM `users` WHERE id = $userID';
$result = mysqli_query($conn, $stuff;
if (mysqli_num_rows($result) >2){
....

正在抓取当前的userID,但如何将其与所需的角色进行比较?