提问人:Born2DoubleUp 提问时间:8/19/2018 最后编辑:Ashley MillsBorn2DoubleUp 更新时间:8/21/2018 访问量:32
按用户筛选数据库结果
Filtering Database Results by User
问:
我似乎无法弄清楚我做错了什么。我正在使用下面的代码从数据库中提取项目。我有 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 语句?
答:
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
这正是我需要的,感谢您的安全提示。我正在从事的项目不是;上市对我来说更像是一个学习过程,所以我会牢记所有的提示。
评论
$SQL