Эта странная ошибка мучила меня еще лет так 5-8 назад. Бросил ее и написал полный путь до значения. И вот снова она меня мучает)))
После execute и fetchAll всегда выдает пустой массив, ошибок не выдает.
function setBindParams (PDOStatement &$stm, array &$array): void
{
#$v = [];# массив для отладки
foreach($array as $key => $val)
{
$mask = ':' . $key;
if(isInt($val))
{
$val = intval($val);
#$v[] = $key . ' - ' . $val . ' int';
# INT - хранит любое число в диапазоне от -2147683648 до 2147683648.
if($val > 2147683648 || $val < -2147683648)
{
$stm->bindParam($mask, $val, PDO::PARAM_STR);
}
else
{
$stm->bindParam($mask, $val, PDO::PARAM_INT);
}
}
elseif(is_null($val))
{
#$v[] = $key . ' - null ' . gettype($val);
$stm->bindParam($mask, $val, PDO::PARAM_NULL);
}
else
{
$val = trim($val);
#$v[] = $key . ' - ' . $val . ' ' . gettype($val);
$stm->bindParam($mask, $val, PDO::PARAM_STR);
}
unset($array[$key]);
}
#print_r($v);
}
Отрабатывает как и должен, выдает массив со значениями.
function setBindParams (PDOStatement &$stm, array &$array): void
{
#$v = [];# массив для отладки
foreach($array as $key => $val)
{
$mask = ':' . $key;
if(isInt($val))
{
$val = intval($val);
#$v[] = $key . ' - ' . $val . ' int';
# INT - хранит любое число в диапазоне от -2147683648 до 2147683648.
if($val > 2147683648 || $val < -2147683648)
{
$stm->bindParam($mask, $array[$key], PDO::PARAM_STR);
}
else
{
$stm->bindParam($mask, $array[$key], PDO::PARAM_INT);
}
}
elseif(is_null($val))
{
#$v[] = $key . ' - null ' . gettype($val);
$stm->bindParam($mask, $array[$key], PDO::PARAM_NULL);
}
else
{
$val = trim($val);
#$v[] = $key . ' - ' . $val . ' ' . gettype($val);
$stm->bindParam($mask, $array[$key], PDO::PARAM_STR);
}
unset($array[$key]);
}
#print_r($v);
}