2

タイトルで説明したように、変数の存在の関数で特定の結果を返すために、php ページで sql クエリを作成したいと考えています。ページの上部にいくつかの入力 (日付、名前など) を含むフォームがあり、クリックすると正しい結果でページが更新されます。

現在、私の構文は次のとおりです。

if (isset($_POST['dated']) && $_POST['dated'] != null){
    $doleances = $bdd->prepare('SELECT * FROM doleance WHERE Priorite < 5 AND Date >= ? ORDER BY ID DESC');
    $doleances->execute(array($newDate));

}
else if (isset($_POST['dated']) && $_POST['dated'] != null && isset($_POST['datef']) && $_POST['datef'] != null){
    $doleances = $bdd->prepare('SELECT * FROM doleance WHERE Priorite < 5 AND Date BETWEEN ? AND ? ORDER BY ID DESC');
    $doleances->execute(array($newDate, $newDate2));
}
else if{...}
else if{...}
...

しかし、それを行うにはもっと良い方法があると思います...よろしくお願いします

4

2 に答える 2

3

build-as-you-go アプローチを使用できます。

// Create holders for the WHERE clauses and query parameters
$where = array(
  "Priorite < 5"  // this looks common across all queries?
);
$params = array();

// Now build it based on what's suppled:
if (!empty($_POST['dated'])){
  if (!empty($_POST['datef'])){
    // Add to the params list and include a WHERE condition
    $params['startdate'] = $_POST['dated'];
    $params['enddate'] = $_POST['datef'];
    $where[] = "Date BETWEEN :startdate AND :enddate";
  }
  else{
    // Add to the params list and include a WHERE condition
    $params['date'] = $_POST['dated'];
    $where[] = "Date >= :date";
  }
}
else if { ... }
else if { ... }

// Now build and execute the query based on what we compiled together
// from above.
$sql = "SELECT * FROM doleance "
     . (count($where) > 0 ? "WHERE " . implode(" AND ", $where) : "")
     . " ORDER BY ID DESC";
$doleances = $bdd->prepare($sql);
$doleances->execute($params);
于 2013-06-13T12:53:48.377 に答える
1

可能性のある投稿された変数の配列を作成することから始めます。

$possibleArgs = array( 'dated', 'datef' );

次に、それぞれ$possibleArgを繰り返し、対応する$_POST[possibleArg]が空でないかどうかを確認します。空でない場合は、述語に追加します。

于 2013-06-13T12:47:39.987 に答える