Mysql
 sql >> Base de données >  >> RDS >> Mysql

Lorsque la clause mysql WHERE est vide, renvoie toutes les lignes

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

ESCAPE_MYSQL_STRING est la fonction pertinente pour échapper les chaînes pour le pilote MySQL que vous utilisez.

Une autre manière, plus modulaire :

$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 bonne chose à ce sujet est que vous pouvez facilement ajouter, supprimer ou modifier la requête pour n'importe quelle situation, en ayant un accès facile à n'importe quelle partie de la requête.

Vous pouvez également le faire avec CASE() en SQL, mais c'est un peu lourd et il ne faut pas non plus s'attendre à de bonnes performances :

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