PDO возвращается пустым для нескольких условий - PullRequest
0 голосов
/ 13 марта 2019

Элементы таблицы:

enter image description here

Источник

$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()?

1 Ответ

2 голосов
/ 13 марта 2019

bindParam принимает значение по ссылке . Это означает, что в то время, когда вы делаете execute(), он принимает текущее текущее значение того, что присвоено $val. Что, очевидно, не то, что вы ожидаете в конце цикла.

Вместо этого используйте bindValue, который немедленно связывает значение вместо ссылки на переменную.

...