2016-04-10 20 views
0

Im Erstellen von detaillierten Produktsuche.Ich überprüft, dass meine Variablen korrekt gebucht werden, aber die Abfrage nichts finden. Meine Frage ist:MySQL: Abfrage mit mehreren Bedingungen

Was könnte in dieser Abfrage falsch sein und was könnte die beste Lösung für die detaillierte Suche in SQL sein?

<?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(); 
} 
+0

Haben Sie versucht, zu 'var_dump()' '$ _POST'or' $ stmt' oder 'errorinfo()' oder was bedeutet 'runQuery()' aussieht? – Chay22

+0

Ich fand, dass die Abfrage nur funktioniert, wenn alle Parameter gepostet werden. Ich muss es neu entwerfen, dass die Abfrage die Ergebnisse mit 1 oder mehreren gebuchten Parametern durchsuchen konnte. – Darius92

+0

Wenn die Variable nicht gebucht, ist es gleich NULL oder nicht in Sql gesetzt? – Darius92

Antwort

2

Versuchen Sie, die richtige Form zu erstellen WHERE Anweisung. Sie sollten Bedingungen für productTitle, category, manufacturer Felder nur dann isset richtige POST Felder hinzufügen.

diesen Code Versuchen:

<?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(); 
} 
+0

Was macht' $ wheres' Variable am Ende? Sie weisen '$ wheres' zu' $ stmt' zu? – Darius92

+0

Sorry, das war Tippfehler, ich repariere es –

+0

Ich denke, Ihre Lösung ist gut, aber ich habe immer noch einige Probleme 'Fatal error: Uncaught Ausnahme 'PDOException' mit Nachricht 'SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064' bei '$ stmt-> execute();' line: '$ stmt = $ user_home-> runQuery (" SELECT * FROM Produkte ". $ Where); } $ stmt-> execute(); ' – Darius92

Verwandte Themen