我似乎无法弄清楚我在做什么错。我正在使用以下代码从数据库中提取项目。我有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%语句时,它将显示所有userID的数据。我在正确编写where语句吗?
答案 0 :(得分:0)
假设您的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注入的风险。为此,您应该看看用于绑定参数的DB驱动程序