gpt4 book ai didi

php - MySQL PDO 计数函数返回不正确的多个 WHERE 条件

转载 作者:行者123 更新时间:2023-11-29 02:00:25 24 4
gpt4 key购买 nike

只要我在 WHERE 子句中只指定一项,这个函数就可以正常工作。如果有多个,它总是返回 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 子句中使用两个条件,无论如何都会导致它返回 0:

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

我试过在 WHERE 子句周围使用和不使用括号,我使用的调试函数正确显示了查询。我也试过在数组中的值周围加上引号。任何帮助将不胜感激。

最佳答案

PDOStatement::bindParam 将一个引用 绑定(bind)到一个变量。与 PDOStatement::bindValue() 不同,该变量被绑定(bind)为引用,并且只会在 PDOStatement::execute() 时被评估> 被调用。


解决方案:

只是改变

$stmt->bindParam(":w_".$key, $value);

$stmt->bindValue(":w_".$key, $value);

关于php - MySQL PDO 计数函数返回不正确的多个 WHERE 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16410584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com