2

WHERE 句で項目を 1 つだけ指定する限り、この関数は正常に機能します。複数ある場合は、常に 0 を返します。

関数は次のとおりです。

function count_rows($table, $where=array()){
    $sql = "SELECT COUNT(*) FROM `$table`";
    if(!empty($where)){
        $sql .= " WHERE (";
        foreach($where as $key=>$value){
            $sql .="`". $key . "`=:w_" . $key . " AND ";
        }
        $sql = substr($sql, 0, -4);
        $sql .= ") ";
    }
    $stmt = $this->conn->prepare($sql);
    foreach($where as $key=>$value){
        $stmt->bindParam(":w_".$key, $value);
    }
    $stmt->setFetchMode(PDO::FETCH_ASSOC);
    $stmt->execute();
    $this->stmt = $stmt; 
    return $this->stmt->fetchColumn();

}

たとえば、次はlist_id$list_id に設定されている行の数を返します。

$email_count = count_rows("emails", array("list_id"=>$list_id));

ただし、WHERE 句で 2 つの条件を使用すると、何があっても 0 が返されます。

$optout_count = count_rows("emails", array("list_id"=>$list_id, "optout"=>"1"));

WHERE 句を括弧で囲むかどうかを試してみましたが、使用するデバッグ関数はクエリを適切に表示します。また、配列内の値を引用符で囲んでみました。どんな助けでも大歓迎です。

4

1 に答える 1