简体   繁体   中英

MySQL:Query with multiple conditions

Im creating detailed product search.I verified that ,my variables are posted correctly, but the query don't finding anything. My question is:

What could be wrong in this query and what could be the best solution for detailed search in SQL?

<?php

if ( 
    isset($_POST["productName"]) || isset($_POST["searchCategory"]) || 
    isset($_POST["searchManufacturer"]) || isset($_POST["costFrom"]) || 
    isset($_POST["costTo"])
){

    $stmt=$user_home->runQuery("SELECT* FROM Products
        WHERE (productTitle='$_POST[productName]' OR '$_POST[productName]' IS NULL)
        AND   (category='$_POST[searchCategory]' OR '$_POST[searchCategory]' IS NULL)
        AND   (manufacturer='$_POST[searchManufacturer]' OR '$_POST[searchManufacturer]' IS NULL)

    ");
    echo $stmt->rowCount();
} 

Try to proper forming WHERE statement. You should add conditions for productTitle , category , manufacturer fields only then isset proper POST fields.

Try this code:

<?php

if (
    isset($_POST["productName"]) || isset($_POST["searchCategory"]) ||
    isset($_POST["searchManufacturer"]) || isset($_POST["costFrom"]) ||
    isset($_POST["costTo"])
){
    $conditions = array();
    if (isset($_POST['productName'])) {
        $conditions[] = "(productTitle='".$_POST['productName']."')";
    }

    if (isset($_POST['category'])) {
        $conditions[] = "(category='".$_POST['searchCategory']."')";
    }

    if (isset($_POST['searchManufacturer'])) {
        $conditions[] = "(manufacturer='".$_POST['searchManufacturer']."')";
    }
    $where = implode(' AND ', $conditions);
    if ($where) {
        $where = 'WHERE '.$where;
    } else {
        $where = "";
    }

    $stmt=$user_home->runQuery("SELECT * FROM Products ". $where);
    echo $stmt->rowCount();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM