按用户过滤数据库结果

时间:2018-08-18 16:00:56

标签: php mysql

我似乎无法弄清楚我在做什么错。我正在使用以下代码从数据库中提取项目。我有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语句吗?

1 个答案:

答案 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驱动程序