PDO 为多个条件返回空

PDO returning empty for multiple condition

Table Items:

Source

$query = "SELECT * FROM `tbl_items` WHERE `name` LIKE '%cell%' AND `is_active`=1";
// the query is generated dynamically so i do have a dynamic params too
$params = [
    'name'      => '%cell%',
    'is_active' => 1,
];

$prepared = $db->prepare($query);
foreach($params as $key => $val)
{
    if(is_int($val))
    {
        $prepared->bindParam(':'.$key, $val, PDO::PARAM_INT);
    }
    else
    {
        $prepared->bindParam(':'.$key, $val);
    }
}

执行后 returns 空结果 ..

不工作:

多个参数..(除了我手动绑定参数)

$prepared->bindParam(':name', $params['name']);
$prepared->bindParam(':is_active', $params['is_active']);

工作:

单个参数 ..(returns 正是我所需要的)

现在我的问题是,循环 bindParam() 时它 returns 为空的原因可能是什么?

bindParam 通过引用 取值 。意思是,在您执行 execute() 时,它采用分配给 $val 的当前值。这显然可能不是您在循环结束时所期望的。

改用 bindValue,它会立即绑定值,而不是变量引用。