依赖于现有变量的php select语句

依赖于现有变量的php select语句,php,mysql,select,if-statement,query-string,Php,Mysql,Select,If Statement,Query String,我正试图为我正在开发的一家小店设置一个过滤系统。基本上,我是根据变量列表计算结果的。页面products.php如果没有querystring将显示所有产品。但是,如果存在变量,我希望它在必要时更改select语句 但是,我在过滤方面有问题。如果我对所有变量使用AND语句,则它不会进行适当过滤,OR也不会。所以,如果我想要黑色的5号鞋,无论颜色如何,它都会显示所有的5号鞋 有没有更好的方法来处理这件事,因为它正在成为一个相当老的挠头者 if ($queryString == NULL){

我正试图为我正在开发的一家小店设置一个过滤系统。基本上,我是根据变量列表计算结果的。页面products.php如果没有querystring将显示所有产品。但是,如果存在变量,我希望它在必要时更改select语句

但是,我在过滤方面有问题。如果我对所有变量使用AND语句,则它不会进行适当过滤,OR也不会。所以,如果我想要黑色的5号鞋,无论颜色如何,它都会显示所有的5号鞋

有没有更好的方法来处理这件事,因为它正在成为一个相当老的挠头者

if ($queryString == NULL){
    $query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id
JOIN prod_color on store_products.prod_id=prod_color.product_id 
GROUP BY store_products.prod_id";   
}else{
        $query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id
JOIN prod_color on store_products.prod_id=prod_color.product_id 
where store_products.sale='$sale' OR prod_color.color='$color' OR prod_sizes.size='$size' OR store_products.cat='$cat' GROUP BY store_products.prod_id";
}
示例变量字符串

products.php?sale=&cat_id=1&size=&color=Yellow

然后执行查询:

在运行查询之前,尝试构建WHERE条件

字符串: products.php?sale=&cat\u id=1&size=&color=Yellow

myfile.php

$criteria = "WHERE 1 ";

if (isset($_GET['sale']) {
    $criteria .= "AND tore_products.sale=$_GET['sale'] ";
}
if (isset($_GET['cat_id']) {
    $criteria .= "AND store_products.cat=$_GET['cat_id'] ";
}
if (isset($_GET['color']) {
    $criteria .= "AND tore_products.color=$_GET['color'] ";
}
依此类推,然后运行查询:

$query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id
JOIN prod_color on store_products.prod_id=prod_color.product_id
$criteria
GROUP BY store_products.prod_id";

在使用mysql\u real\u escape\u string、mysqli或PDO查询之前,请记住清除$\u GET变量

您应该注意,如果第一个或条件为真,则不会进一步比较。如果只想返回特定的记录,还必须将颜色和大小与和条件进行比较
$query = "SELECT * FROM store_products 
JOIN store_cat on store_products.cat=store_cat.cat_id 
JOIN prod_sizes on store_products.prod_id=prod_sizes.product_id
JOIN prod_color on store_products.prod_id=prod_color.product_id
$criteria
GROUP BY store_products.prod_id";