按用户筛选数据库结果

Filtering Database Results by User

提问人:Born2DoubleUp 提问时间:8/19/2018 最后编辑:Ashley MillsBorn2DoubleUp 更新时间:8/21/2018 访问量:32

问:

我似乎无法弄清楚我做错了什么。我正在使用下面的代码从数据库中提取项目。我有 25,000 个项目,有 300 多个用户。当我使用此代码时,它只显示来自每个用户的所有项目,而不是我提供的 USERID。

$UserId is set correctly and displays the right output.
$query is either empty, or contains a search term.
$Pagination contains the pagination number.
$PaginationLimit contains how many items I wanna view per page.

$SQL = "SELECT * FROM MYTABLE WHERE user_id='".$UserId."' AND (`item_title` LIKE '%".$query."%') OR (`item_id` LIKE '%".$query."%') ORDER BY date_published DESC LIMIT ".$Pagination." , ".$PaginationLimit;

我做错了什么?

编辑#1: $SQL通过 $db->query($SQL) 运行,该函数可以保护我免受人们想要做的所有令人讨厌的事情的影响。

编辑#2: 我觉得问题出在我的 where 陈述中。如果我只包含 user_id='$UserID' 的地方,那么它工作正常并且只显示来自该 UserID 的数据,当我添加 AND 后跟 %Like% 语句时,它会显示来自所有用户 ID 的数据。我是否正确编写了 where 语句?

PHP 的MySQL

评论

0赞 user3783243 8/19/2018
结果是什么?您的数据库记录是什么?看起来你对SQL注入持开放态度。$SQL
0赞 Isaac 8/19/2018
我们可以看到你的$query变量吗,它看起来对所有东西都是一样的,所以这就是为什么它会选择所有项目
0赞 Born2DoubleUp 8/19/2018
我已经更新了我的帖子,让您了解$SQL去哪里。数据通过一个功能运行,该功能可以保护我免受所有讨厌的东西的侵害。另外,艾萨克,$query是=“”或=“某个单词或短语”。无论哪种方式,无论是否为空,它都应该只显示来自 UserID 的项目?我觉得这是第一个语句不起作用的地方。如果我拿走 where 语句的其余部分并只留下 where user_id='',它可以正常工作。
0赞 ScaisEdge 8/19/2018
哪种数据类型是 user_id 整数还是 varchar??

答:

0赞 ScaisEdge 8/19/2018 #1

假设你user_id是 varchar ...(否则,您应该删除user_id值周围的单引号)

如果 和 条件 对于两个相似条件,您应该使用额外的 ()

  $SQL = "SELECT * 
        FROM MYTABLE 
        WHERE user_id='".$UserId."'   
        AND ( (`item_title` LIKE '%".$query."%') 
        OR (`item_id` LIKE '%".$query."%') ) 
        ORDER BY date_published 
        DESC LIMIT ".$Pagination." , ".$PaginationLimit;

无论如何,您不应该在 SQL 中使用 php var,您有 sql 注入的风险......为此,您应该查看用于绑定参数的数据库驱动程序

评论

0赞 Born2DoubleUp 8/19/2018
这正是我需要的,感谢您的安全提示。我正在从事的项目不是;上市对我来说更像是一个学习过程,所以我会牢记所有的提示。