$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);
这样做的好处是您可以轻松地添加、删除或更改任何情况下的查询,轻松访问查询的任何部分。
您也可以CASE()
在 SQL 中执行此操作,但它有点麻烦,您也不应该期望良好的性能:
SELECT * FROM objects
WHERE transactiontype LIKE
CASE WHEN '$randomvariable' = '' THEN
'%'
ELSE
'$randomvariable'
END CASE
ORDER BY id DESC
另一种方法:
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";
这里有一些很好的答案。我要添加一个简单的解决方案。
当我不需要 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,并且您可以保持循环字符串连接的格式相同。您显然可以扩展这个概念来做更多事情,但就这个问题而言,这个伪代码只是实现目标的一种简单方法。
您可以使用 IN 运算符来指示 WHERE 子句的许多值,并将 transactiontype 的所有可能值包括为默认参数。
将其拆分为 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。
添加一个简单的 if 语句检查 $randomvariable 是否为空。如果是,则更改查询以返回所有行。