Mysql
 sql >> Database >  >> RDS >> Mysql

Quando la clausola mysql WHERE è vuota, restituisce tutte le righe

$randomvariable = ESACPE_MYSQL_STRING($_GET['randomvariable']);
$search =
    "SELECT * FROM objects " .
    (empty($randomvariable) ? "" : "WHERE transactiontype='$randomvariable' ") .
    "ORDER BY id DESC";

Dove ESCAPE_MYSQL_STRING è la funzione rilevante per l'escape delle stringhe per qualsiasi driver MySQL tu stia utilizzando.

Un altro modo più modulare:

$search = array(
    "select" => "SELECT * FROM objects",
    "where" => "WHERE transactiontype='$randomvariable'",
    "order" => "ORDER BY id DESC"
);

if (empty($randomvariable)) {
    unset($search["where"]);
}

$search = implode(' ', $search);

La cosa bella di questo è che puoi aggiungere, rimuovere o modificare facilmente la query per qualsiasi situazione, avendo facile accesso a qualsiasi parte della query.

Puoi farlo anche con CASE() in SQL, ma è alquanto ingombrante e non dovresti nemmeno aspettarti buone prestazioni:

SELECT * FROM objects
WHERE transactiontype LIKE
    CASE WHEN '$randomvariable' = '' THEN
        '%'
    ELSE
        '$randomvariable'
    END CASE
ORDER BY id DESC