0

たとえば、どのパラメータを期待するかを知っていれば、単純に使用できることがわかります

$_GET['parameter']

MYSQL クエリで。4 ~ 5 個のパラメーターが必要であるが、すべてが渡されない可能性がある場合はどうすればよいでしょうか? たとえば、ユーザーが年数が 1 年以上のすべての製品を一覧表示したいとprice20$ます。warranty2

ユーザーは、たとえば、製品カテゴリが2どれであるかなど、より多くの検索オプションを持つことができますLaptops

今、私の質問は、多くの 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 に答える