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