首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在sql查询中使用会话变量时试图获取非对象的属性。

在sql查询中使用会话变量时试图获取非对象的属性。
EN

Stack Overflow用户
提问于 2018-01-24 04:18:54
回答 2查看 132关注 0票数 1

因此,我目前正在编写一个系统,当他们登录时,他们会得到一个专门的面板来显示他们的排名。

默认情况下,它们被称为User,管理员得到了Admin。

当我试图确认他们是行政人员的时候。

代码语言:javascript
运行
复制
error_reporting(E_ALL); // i've been trying to find the bugs with this
require_once('db.php'); //using the good ol $conn = new mysqli
session_start();
if(!isset($_SESSION['username']) || empty($_SESSION['username'])){
  header("location: login.php");
  exit;
//to detect if they are logged in or not
}

//here is a failed attempt where I tried to "escape" the $_SESSION variable 
//  which still doesn't work
$username = $conn->real_escape_string($_SESSION['username']);
// I've tried this query with the $_SESSION variable escaped, with it's alias
// etc.
$query1 = "SELECT * FROM `users` WHERE `rank` = Admin AND 
`username`='".$username."'";

// preparing to execute
$result = $conn->query($query1);

// this is where I detect if there is a row, set it to use Admin things 
// which I will code later, for now just var holders.
if ($result->num_rows > 0) {
  $rank = 'Admin';
} else {
  $rank = 'User';
}

我到处都找过非对象的属性,但我只找到了旧的2008年帖子,我试着去实现,但最后却没有用。

在PHP 7中使用XAMPP (apache)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-24 04:26:21

您需要更正您的SQL

代码语言:javascript
运行
复制
"SELECT * FROM `users` WHERE `rank` = Admin AND `username`='".$username."'"

代码语言:javascript
运行
复制
"SELECT * FROM `users` WHERE `rank` = 'Admin' AND `username`='".$username."'"

注:单引号在Admin之间

我建议改为使用下面的SQL,并将秩值直接存储到SESSION

代码语言:javascript
运行
复制
"SELECT rank FROM `users` WHERE `username`='".$username."'"
票数 0
EN

Stack Overflow用户

发布于 2018-01-24 04:42:46

由于您使用的是mysqli,所以考虑使用准备语句。通过将变量值连接到查询字符串中,您很容易使用SQL注入!

更多关于准备好的语句,在这里:Php.net/准备好的发言稿

您还在查询中丢失了一些' ',尽管在使用准备语句时不需要在输入变量上添加任何撇号,而必须包含常量字符串周围的撇号(在示例rank='Admin'中缺少它们)。

这里是更正的代码:

注意:我将session_start()移到文档的顶部,以确保它正常工作,因为如果在调用函数之前发生任何输出,它将无法工作。

代码语言:javascript
运行
复制
session_start();
error_reporting(E_ALL);
require_once('db.php'); //using the good ol $conn = new mysqli

if(empty($_SESSION['username']))
{
   header("location: login.php");
   exit();
}

$query1 = $conn->prepare("SELECT * FROM users WHERE rank='Admin' AND username=?");
$query1->bind_param("s", $_SESSION['username']);
$query1->execute();
$query1->store_result();
$result = $query1->num_rows;

if ($result > 0)
{
   $rank = 'Admin';
}
else
{
   $rank = 'User';
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48414748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档