0

例如,我知道如果您知道可以简单地使用哪些参数

$_GET['parameter']

在您的 MYSQL 查询中。如果您期望有 4-5 个参数,但可能并非所有参数都通过了怎么办?例如,假设用户想要列出所有price超过20$和 a年warranty的产品2

用户可以有更多的搜索选项,例如,产品类别应该2Laptops

现在,我的问题是,我是否应该有很多 if 语句并检查每个可能的参数以查看它们是否已设置,然后是否将它们包含在我的 MYSQL 查询中,还是有更快的方法?提前致谢

4

2 回答 2

0

你应该试试 foreach。就像是:

foreach($_GET as $key => $value) {
   switch($key) {
      case "category":
         $str[] = "category = '". mysql_real_escape_string($value) ."'";
         break;
      case "price":
         $str[] = "price > '". mysql_real_escape_string($value) ."'";
         break;
      case "warranty":
         $str[] = "warranty > '". mysql_real_escape_string($value) ."'";
         break;
   }
}
//create the mysql string with
$str_where = "WHERE " . implode('AND', $str);

您可以使用 str_where 字符串来过滤产品。

于 2012-12-07T12:58:23.370 回答
0

出于安全原因,我肯定会首先列出可以在查询中使用的可用键及其数据类型。

$keys = array(
    'category'  => PDO::PARAM_INT,
    'price'     => PDO::PARAM_INT,
    'etc'       => PDO::PARAM_STR
);
// all the available keys for the query and their types

$queryStr = "SELECT * FROM `some_table` WHERE `yourCond`='someVal'";
// initial query you have

$userVals = array();
foreach ($_GET as $key => $value) {
    $k = strtolower($key);
    if (!in_array($k,array_keys($keys)) || empty($value))
    // if the key is not listed in the keys array
    // or the value is empty we skip it
        continue;
    $queryStr .= " AND `$k` = :{$k} ";
    // modify query
    $userVals[$k] = $value;
    // and add the key-value pair into user values array
}

$db = new PDO('mysql:host=someHost;dbname=someDB','someUsername','somePassword');
// create DB connection
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
// enable error reporting
$stmt = $db->prepare($queryStr);
// prepare query string
foreach ($userVals as $k => $v) {
    $stmt->bindParam(":{$k}",$v,$keys[$k]);
    // bind each parameter with the right datatype
}

$stmt->execute();
// and execute the query
于 2012-12-07T13:53:00.687 回答