使用WHERE子句而不过滤事物

时间:2013-06-18 17:03:40

标签: php sql

WHERE子句的存在是为了帮助我们过滤结果,我从用户那里得到一个告诉我如何过滤结果的值,如

WHERE brand="'$brand_that_chosen_by_user'"

其中一个选项是每个品牌,这意味着根本不进行过滤。 那么$ brand_that_chosen_by_user需要的价值是什么,所以WHERE子句不会过滤东西并返回所有品牌的结果。

3 个答案:

答案 0 :(得分:3)

在添加where子句之前,您首先要测试他们是否选择了ALL值。

$sql = " SELECT * FROM tbl";
if($brand != 'ALL'){
    $sql .= " WHERE brand = '{$brand}'";
}

答案 1 :(得分:0)

  1. 您有一个SQL注入漏洞。 $brand_that_chosen_by_user = union select user,password from users
  2. 当用户选择“Every”时,您应该考虑删除'where'子句。

答案 2 :(得分:0)

您有两种选择。

根据需要动态添加WHERE子句:

if ($brand != 'Every brand') {
    $sql .= " WHERE brand = :brand";
}

或者让您的SQL语句作为特例处理:

SELECT * FROM some_table WHERE :brand = 'Every brand' OR brand = :brand

我使用PDO prepared statements(以防止SQL注入),因此在这两种情况下,您都需要将参数与$statement->bindParam("brand", $brand);绑定。