我知道,例如,如果你知道什么参数,你可以简单地使用
$_GET['parameter']
在您的MYSQL查询中。如果您期望4-5参数怎么办,但是并非所有参数都通过?例如,假设用户想要列出price
超过20$
和warranty
2
年的所有产品。
用户可以拥有更多搜索选项,例如,产品类别应为2
<{1}}
现在,我的问题是,我应该有多个if语句并检查每个可能的参数以查看它们是否已设置,以及它们是否包含在我的MYSQL查询中,还是有更快的方法? 提前谢谢
答案 0 :(得分: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字符串过滤产品。
答案 1 :(得分: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