【发布时间】:2020-04-04 22:36:31
【问题描述】:
我有一个疑问:SELECT brand FROM products WHERE brand='".$brand."' AND category='".$id."'".$categories_list."
这个想法是通过一个类别 ID 或一个品牌编号的 ID 来计算一个类别内或多个类别中的总产品数。
当前的代码:
foreach ($product_brands as $brand) {
$products_sql = mysqli_query($mysql_link, "SELECT brand FROM products WHERE brand='".$brand."' AND category='".$id."'".$categories_list."");
$brand_total = @mysqli_num_rows($products_sql);
array_push ($product_brands_count, $brand_total);
}
只计算一个类别时它可以正常工作。但是,在尝试计算多个类别时,它会显示错误的计数。
如果显示多个类别,$categories_list 会将OR category='".$categories_data['id']."' 添加到查询中。
我尝试在查询语句中移动brand='".$brand."',但这对我不起作用。
这是我得到的一些计数。
单一类别:--正确
Brand 1 = 3
Brand 2 = 5
多个类别——不是
Brand 1 = 8
Brand 2 = 11
【问题讨论】:
-
您需要将所有
category匹配项括在括号中,因为它们包含OR。基本逻辑。一种更有效的方法是将IN用于类别。 -
您也对SQL injection 敞开心扉。你应该改用prepared statements。
标签: php mysql sql where-clause