php select语句依赖于变量存在

时间:2011-06-02 15:18:25

标签: php mysql select if-statement query-string

我正在尝试为我正在开发的小商店设置过滤系统。基本上,我正在从变量列表中处理结果。页面,products.php如果没有查询字符串将显示所有产品。但是,如果存在变量,我希望它在必要时更改select语句。

然而,我遇到过滤问题。如果我对所有变量使用AND语句,它不会适当地过滤OR。因此,如果我想要黑色尺码5的鞋子,无论颜色如何,它都会显示所有尺寸为五的鞋子。

有没有更好的方法来接受这一点,因为它正在成为一个公平的老头!#/ p>

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

2 个答案:

答案 0 :(得分:0)

$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 ";

if {$queryString != NULL){
$query .= " WHERE tore_products.sale='$sale' OR prod_color.color='$color' OR prod_sizes.size='$size' OR store_products.cat='$cat'"
}
$query .=" GROUP BY store_products.prod_id;"

然后执行查询:)

答案 1 :(得分:0)

在运行查询之前尝试构建WHERE标准。

字符串:
products.php?sale=&cat_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_real_escape_stringmysqliPDO查询之前清理$ _GET变量