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

标签 php mysql pdo

只要我在 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/

相关文章:

php - 将 Flickr json 数据插入 mysql 数据库

php - fgetcsv 没有正确读取保存在 linux 系统中的 csv 文件

php - symfony3 : create form for entity that has a column with many to one relationship

mysql - 选择年份格式的字符串值

php - 插入值列表与列列表不匹配 : 1136 Column count doesn't match value count at row 1

PHP PDO 事务自动回滚

php - Symfony 表单验证在编辑中不起作用

MySQL if/条件查询?

MySQL 列标题为单列,第二列为值

php - MYSQL在不同情况下给出相同的响应 '0 rows affected'