Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wenn die mysql-WHERE-Klausel leer ist, werden alle Zeilen zurückgegeben

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

Wobei ESCAPE_MYSQL_STRING ist die relevante Funktion zum Maskieren von Zeichenfolgen für den von Ihnen verwendeten MySQL-Treiber.

Ein anderer, modularerer Weg:

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

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

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

Das Schöne daran ist, dass Sie die Abfrage für jede Situation einfach hinzufügen, entfernen oder ändern können und einfachen Zugriff auf jeden Teil der Abfrage haben.

Sie könnten dies auch mit CASE() in SQL, aber es ist etwas umständlich und Sie sollten auch keine gute Leistung erwarten:

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