$randomvariable=$_GET['randomvariable'];
$search="SELECT * from objects
WHERE transactiontype='$randomvariable'
order by id DESC";
ここで、$randomvariable
が空(何もない)の場合、すべての行を返すようにします。現在、空の場合は何も返されません。これは、基本的にすべての行から何も検索しないためです。
$randomvariable = ESACPE_MYSQL_STRING($_GET['randomvariable']);
$search =
"SELECT * FROM objects " .
(empty($randomvariable) ? "" : "WHERE transactiontype='$randomvariable' ") .
"ORDER BY id DESC";
ESCAPE_MYSQL_STRING
使用している MySQL ドライバーに関係なく、文字列をエスケープするための関連関数はどこにありますか。
別の、よりモジュール化された方法:
$search = array(
"select" => "SELECT * FROM objects",
"where" => "WHERE transactiontype='$randomvariable'",
"order" => "ORDER BY id DESC"
);
if (empty($randomvariable)) {
unset($search["where"]);
}
$search = implode(' ', $search);
これの良いところは、クエリのどの部分にも簡単にアクセスして、どのような状況でも簡単にクエリを追加、削除、または変更できることです。
SQL でこれを行うこともできCASE()
ますが、やや面倒であり、優れたパフォーマンスも期待できません。
SELECT * FROM objects
WHERE transactiontype LIKE
CASE WHEN '$randomvariable' = '' THEN
'%'
ELSE
'$randomvariable'
END CASE
ORDER BY id DESC
ここにはいくつかの素晴らしい答えがあります。簡単な解決策のために追加するものがあります。
WHERE 句を作成する条件が満たされていないため、WHERE 句が必要ないときに、この問題が発生することがあります。私がよく使う簡単なトリックは次のようなものです。
$sql_statement = "SELECT * FROM ".$table_names." WHERE 1 = 1 ";
if ($array) {
foreach ($array as $key => $value){
$sql_statement .= " AND ".$key." = '".$value."' ";
}
}
この方法では、WHERE 句で 1 は常に 1 に等しく、ループされた文字列の連結を同じ形式に保つことができるため、トリッキーなロジックや文字列操作は必要ありません。この概念を拡張してさらに多くのことを実行できることは明らかですが、この質問の目的のために、この疑似コードは目標を達成するための単純な方法にすぎません。
別のアプローチ:
if ($_GET['randomvariable'] != "") {
$where = "transactiontype = " . $randomvariable;
} else {
$where = "1";
}
$search = "SELECT * from objects WHERE " . $where . " ORDER BY id DESC";
以下のようにしてみてください
$randomvariable=mysql_real_escape_string($_GET['randomvariable']);
$where = '';
if($randomvariable){
$where .= "WHERE transactiontype='{$randomvariable}'";
}
$search="SELECT * from objects ".$where." order by id DESC";
2 つのクエリに分割します。
$randomvariable = $_GET['randomvariable'];
if($randomvariable)
$search="SELECT * from objects WHERE transactiontype='$randomvariable' order by id DESC";
else
$search="SELECT * from objects order by id DESC";
あなたの言語ではなくSQLで本当にそれを行う必要がある場合は、これを行うことができます:
$search="SELECT * from objects WHERE ("" = '$randomvariable' or transactiontype='$randomvariable') order by id DESC";
ただし、これはうまく機能しないため、言語の IF/ELSE を優先する必要があります。
$randomvariable が null かどうかをチェックする単純な if ステートメントを追加します。その場合は、クエリを変更してすべての行を返します。