【问题标题】:PDO returning empty for multiple conditionPDO 为多个条件返回空
【发布时间】:2019-08-03 20:34:04
【问题描述】:

表格项目:

来源

$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);
    }
}

执行时返回空结果..

不工作:

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

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

工作:

单参数..(它返回的正是我需要的)

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

【问题讨论】:

  • 对不起,我可能遗漏了一些东西,但是你绑定的参数的占位符在哪里(例如:is_active) - 我希望看到“SELECT * FROM tbl_items WHERE name LIKE '% :name%' AND is_active= :active",但也许这是我不习惯的不同风格?您是否尝试过打印连接错误/php 错误?

标签: php database oop pdo php-7


【解决方案1】:

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

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

【讨论】:

  • 嗨,我在循环中找到了答案 .. 在我的循环中而不是使用 $prepared->bindParam(':'.$key, $val); 我使用 $prepared->bindParam(':'.$key, $params[$key]); 代替.. 我不明白为什么.. 但它仍然有效..
  • ahhh .. 我明白了.. 现在我明白了.. $val 的执行时间不再可用.. 谢谢老兄..
猜你喜欢
  • 2014-12-14
  • 2013-04-21
  • 1970-01-01
  • 2015-08-26
  • 2013-09-27
  • 2014-02-02
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
相关资源
最近更新 更多