3

SQLクエリのキーと値のペアの引数の間に「AND」を追加したいのですが、方法がわかりません。ネットを検索してみましたが、解決策が見つかりませんでした。

       $cdatahome = fetchCategory(array("status"=>"1","home"=>"1")); 

       function fetchCategory(array $conditions){
        $db = Core::getInstance();

            $sql = "SELECT id, title FROM ruj_category WHERE ";

            $params = array();
            foreach ($conditions as $column => $value) {
            if (preg_match('/^[a-z-.]+$/', $column)) {

            $sql .= "$column = ?";
            $params[] = $value;

     }
    }           
            $sql .= " order by title asc";  
            $res = $db->dbh->prepare($sql);
            $res->execute(array_values($params));
                $res = $res->fetchAll(PDO::FETCH_ASSOC);        

            return $res;
4

4 に答える 4

5
$where = array();
foreach ($conditions as $column => $value) {
    if (preg_match('/^[a-z-.]+$/', $column)) {
        $where[] = "$column = ?";
        $params[] = $value;
    }
}
$sql .= implode(' AND ', $where);
于 2012-12-13T19:30:26.130 に答える
1

通常、 AND (URLの場合)のようなものを入れたいときは、配列を作成して、真ん中に必要な文字列に内破します。例えば:

$items = array("a", "b", "c");

$output = implode(" AND ", $items);

出力:

"a AND b AND c"

あなたの場合、foreachループを実行して文字列を作成し、2番目の回答にリストされている関数の接着剤としてANDを使用できます。implode()

于 2012-12-13T19:29:05.883 に答える
1
$cdatahome = fetchCategory(array("status"=>"1","home"=>"1")); 

   function fetchCategory(array $conditions){
    $db = Core::getInstance();

        $sql = "SELECT id, title FROM ruj_category WHERE ";

        $params = array();
        $i = 0;
        foreach ($conditions as $column => $value) {
        if (preg_match('/^[a-z-.]+$/', $column)) {
        if($i != 0){
        $sql .= ' AND ';
        }
        $sql .= "$column = ?";
        $params[] = $value;
        $i++;
 }
}           
        $sql .= " order by title asc";  
        $res = $db->dbh->prepare($sql);
        $res->execute(array_values($params));
            $res = $res->fetchAll(PDO::FETCH_ASSOC);        

        return $res;
于 2012-12-13T19:31:16.710 に答える
0

まず、$ paramsの値と同じように、条件を配列に入れることができます。のよう$cond[]="$column = ?"にそしてその後$sql.=implode(' AND ',$cond);

foreachで解決するには:ループセットの前とループ$first=false;内で$sql.=($first?'':' AND ')."$column = ?"; $first=false;

于 2012-12-13T19:33:03.137 に答える