5
$randomvariable=$_GET['randomvariable'];
$search="SELECT * from objects
          WHERE transactiontype='$randomvariable'
          order by id DESC";

现在如果$randomvariable为空(什么都没有),我希望它返回所有行。目前,如果它为空,则不会返回任何内容,因为它基本上不会从所有行中搜索任何内容。

4

8 回答 8

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);

这样做的好处是您可以轻松地添加、删除或更改任何情况下的查询,轻松访问查询的任何部分。


您也可以CASE()在 SQL 中执行此操作,但它有点麻烦,您也不应该期望良好的性能:

SELECT * FROM objects
WHERE transactiontype LIKE
    CASE WHEN '$randomvariable' = '' THEN
        '%'
    ELSE
        '$randomvariable'
    END CASE
ORDER BY id DESC
于 2012-10-24T08:26:04.280 回答
1

另一种方法:

if ($_GET['randomvariable'] != "") {
   $where = "transactiontype = " . $randomvariable;
} else {
   $where = "1";
}

$search = "SELECT * from objects WHERE " . $where . " ORDER BY id DESC";
于 2012-10-24T08:25:20.583 回答
1

尝试如下

$randomvariable=mysql_real_escape_string($_GET['randomvariable']);

$where = '';
if($randomvariable){
 $where .= "WHERE transactiontype='{$randomvariable}'";
}

$search="SELECT * from objects ".$where." order by id DESC";
于 2012-10-24T08:25:27.757 回答
1

这里有一些很好的答案。我要添加一个简单的解决方案。

当我不需要 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,并且您可以保持循环字符串连接的格式相同。您显然可以扩展这个概念来做更多事情,但就这个问题而言,这个伪代码只是实现目标的一种简单方法。

于 2014-06-25T19:02:36.797 回答
1

您可以使用 IN 运算符来指示 WHERE 子句的许多值,并将 transactiontype 的所有可能值包括为默认参数。

于 2016-06-03T22:41:33.513 回答
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";
于 2012-10-24T08:25:31.610 回答
0

如果你真的需要用 SQL 而不是你的语言,你可以这样做:

$search="SELECT * from objects WHERE ("" = '$randomvariable' or transactiontype='$randomvariable') order by id DESC";

但是,这不会很好地执行,并且应该首选您的语言中的 IF/ELSE。

于 2012-10-24T08:26:05.357 回答
0

添加一个简单的 if 语句检查 $randomvariable 是否为空。如果是,则更改查询以返回所有行。

于 2012-10-24T08:27:03.200 回答