$randomvariable=$_GET['randomvariable'];
$search="SELECT * from objects
WHERE transactiontype='$randomvariable'
order by id DESC";
现在,如果$randomvariable
为空(无),我希望它返回所有行。目前,如果它为空,则不返回任何内容,因为它基本上不会从所有行中搜索任何内容。
答案 0 :(得分:5)
$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
答案 1 :(得分:1)
另一种方法:
if ($_GET['randomvariable'] != "") {
$where = "transactiontype = " . $randomvariable;
} else {
$where = "1";
}
$search = "SELECT * from objects WHERE " . $where . " ORDER BY id DESC";
答案 2 :(得分:1)
尝试以下
$randomvariable=mysql_real_escape_string($_GET['randomvariable']);
$where = '';
if($randomvariable){
$where .= "WHERE transactiontype='{$randomvariable}'";
}
$search="SELECT * from objects ".$where." order by id DESC";
答案 3 :(得分:1)
这里有一些很棒的答案。我有一个可以添加一个简单的解决方案。
当我不需要WHERE子句时,我有时遇到这个问题,因为我没有满足构建我的WHERE子句的任何条件。我喜欢使用的一个简单技巧是:
$sql_statement = "SELECT * FROM ".$table_names." WHERE 1 = 1 ";
if ($array) {
foreach ($array as $key => $value){
$sql_statement .= " AND ".$key." = '".$value."' ";
}
}
这样,您不需要任何棘手的逻辑或字符串操作,因为1在WHERE子句中始终等于1,并且您可以使循环字符串concats保持相同的格式。你可以明显地扩展这个概念来做更多的事情,但是出于这个问题的目的,这个伪代码只是实现目标的一种简单方法。
答案 4 :(得分:1)
您可以使用IN运算符指示WHERE子句的许多值,并将transactiontype的所有可能值包括为默认参数。
答案 5 :(得分:0)
将其拆分为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";
答案 6 :(得分:0)
如果你真的需要用SQL而不是用你的语言来做,你可以这样做:
$search="SELECT * from objects WHERE ("" = '$randomvariable' or transactiontype='$randomvariable') order by id DESC";
然而,这不会很好,并且应该首选使用您的语言的IF / ELSE。
答案 7 :(得分:0)
添加一个简单的if语句,检查$ randomvariable是否为null。如果是,则更改查询以返回所有行。