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

Når mysql WHERE-klausulen er tom, returneres alle rækker

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

Hvor ESCAPE_MYSQL_STRING er den relevante funktion til at undslippe strenge for den MySQL-driver du bruger.

En anden, mere modulær måde:

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

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

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

Det gode ved dette er, at du nemt kan tilføje, fjerne eller ændre forespørgslen til enhver situation, idet du har nem adgang til enhver del af forespørgslen.

Du kan også gøre dette med CASE() i SQL, men det er noget besværligt, og du skal heller ikke forvente god ydeevne:

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


  1. Understøtter MySQL brugerdefinerede datatyper

  2. Hvordan forhindrer man overskridelse af max_user_connections ved genindlæsning/opdatering af siden flere gange?

  3. Skinner 3 - Ivrig lastning med betingelser

  4. Fjern primærnøgle i MySQL