Come è possibile eseguire una query MySQL con più DOVE-clausole?

come si potrebbe fare una query mysql in cui un utente può scegliere tra più opzioni. Fox esempio ho un form che l’utente può utilizzare per la ricerca di case. Ora ho un menu a tendina dove è possibile chosse se si desidera una casa, un appartamento o qualsiasi altra cosa. Poi ho un secondo di dialogo in cui è possibile scegliere, per esempio, la città che vuoi casa o dell’appartamento. E forse un altro con il massimo prezzo.

Ora come fare la query mysql? Il mio problema è che vorrei farlo così:
if($_POST[“house_type”] != 0) {
$select = mysql_query(“SELECT * FROM qualunque DOVE type = ‘”.$_POST[“house_type”].”‘”);
}
Ma ora ho solo il caso che qualcuno di loro ha scelto un tipo di casa, ma non a qualsiasi altra opzione. Quindi devo fare un “se” per ogni possibile combinazione di elementi selezionati?

Sottolineare il mio problema:

if(!isset($_POST["house_type"])) {

            if($_POST["something"] == 0) {
        $search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]);

            }
            elseif($_POST["something"] != 0) {
        $search_select = @mysql_query("SELECT * FROM housedata  something = $_POST["whatever"] AND somethingelse = 'whatever');
            }
        }



elseif(!isset($_POST["house_type"])) {


        if($_POST["something"] == 0) {
        $search_select = @mysql_query("SELECT * FROM housedata WHERE something = $_POST["whatever"]);

            }
            elseif($_POST["something"] != 0) {
        $search_select = @mysql_query("SELECT * FROM housedata  something = $_POST["whatever"] AND somethingelse = 'whatever');
            }
        }

Ora immaginate avevo tipo 10 o 20 diverse caselle di selezione, i campi di input e le caselle di controllo e vorrei fare una query mysql a seconda di queste scatole e campi e caselle di controllo è pieno. Questo sarebbe un codice che è estremamente complicata, lenta e orribile. Quindi c’è una possibilità di fare una query mysql come:

SELECT * FROM whatever WHERE house_data = '".$whatever."' AND (if(isset($_POST["something"])) { whatever = '".$whatever2."' } AND ...;

Si ottiene quello che voglio dire? È un po ‘ complicato da spiegare, ma in realtà è una domanda molto importante e, probabilmente, è facile rispondere.

Grazie per il vostro aiuto!
phpheini

Il ciclo e concatenare tutte le opzioni?

OriginaleL’autore phpheini | 2011-02-23

5 Replies
  1. 4

    Generare la clausola WHERE prima dell’esecuzione di SQL.

    Un breve esempio:

    $whereClause = "";
    
    if ($_POST['opt1']) {
        $opt1 = mysql_real_escape_string($_POST['opt1']);
        $whereClause .= "AND opt1='$opt1'";
    }
    
    if ($_POST['opt2']) {
        $opt2 = mysql_real_escape_string($_POST['opt2']);
        $whereClause .= "AND opt2='$opt2'";
    }
    
    mysql_query("SELECT * FROM table WHERE 1 ".$whereClause); 
    Grazie! Molto bello e facile!
    Basta ricordarsi di sfuggire a tutto ciò che viene tramite $_POST per evitare SQL injection 🙂
    bucks dice che non 😉
    utilizzando mysql_real_escape_string
    Certo è, a seconda se la sicurezza è la vostra lista di priorità, quindi, utilizzando le istruzioni preparate è una opzione migliore – check-out DOP / MySQLi

    OriginaleL’autore lethalMango

  2. 1

    A punto un po ‘ per il verso giusto, provare qualcosa di simile a questo:

    if(isset($_POST["something"]))
    {
        $where = " AND whatever = '".$whatever2."'";
    }
    else    $where = '';
    
    mysql_query("SELECT * FROM whatever WHERE house_data = '".$whatever."'".$where);
    Potrebbe desiderare di utilizzare aggiungere in questo caso $where .= " AND whatever = ....
    Grazie! Stavo gia ‘ pensando a questo, ma ho pensato che c’è una funzione mysql o qualcosa del genere.

    OriginaleL’autore Michiel Pater

  3. 1
    $where = array();
    if($_POST["something"]) {
        $where[]  = " something =".$_POST["something"];
    }
    if($_POST["something2"]) {
       $where[]  = " something2=".$_POST["something2"];
    }
    .
    .
    .
    //build where string
    $where_ = !(empty($where) ? " WHERE ".implode(" AND ",$where) : "";
    //build sql
    $sql = "SELECT * ... ".$where;

    OriginaleL’autore Mohammad Arshi

  4. 0

    scrivere alcune semplici query builder

    $where = array();
    if($_POST["something"]) {
    
    
    $where[]  = sprintf(" something='%s'",$_POST["something"]);

    //sprintf – evitare SQL injection
    }

    if($_POST["something2"]) {
    
    
    $where[]  = sprintf(" something2='%s'",$_POST["something2"]);
    }
    //build where string
    $where_str = " WHERE ".implode(" AND ",$where);
    //build sql
    $sql = "SELECT * ... $where_str";
    Grazie, ma cos’è esattamente il sprintf fare in questo caso?
    Si getta $_POST variabile stringa e scappa caratteri speciali, che impedisce di iniezioni SQL vedi immagine imgs.xkcd.com/comics/exploits_of_a_mom.png

    OriginaleL’autore Michal

  5. 0

    Hai bisogno per costruire la stringa di ricerca separatamente, ma il formato è semplicemente

    SELECT * FROM your_table WHERE number = {$number} AND sentence = '{$sentence}';

    Dato che si sta creando il termine di ricerca è basato su PHP logica di fare questo:

    $search = "SELECT * FROM your_table WHERE ";
    if(isset($whatever)) $search .= "something = '{$whatever}'";
    if(isset($whateverelse)) $search .= " AND somethingelse = '{$whateverelse}'";
    $search_select = mysql_query($search);
    Grazie mille! Perché hai messo le variabili in parentesi graffe ({ e })? E ‘ di meglio ‘”.$numero.”‘?
    Se $whatever non è stato impostato, ma $whateverelse era finireste con "SELECT * FROM your_table WHERE AND somethingelse = '{$whateverelse}'";
    whas che una risposta alla mia domanda?

    OriginaleL’autore MattP

Lascia un commento