inilim2
@inilim2
Intern PHP

Почему $stm->bindParam не принимает переменную от цикла foreach?

Эта странная ошибка мучила меня еще лет так 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);
}
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
inilim2
@inilim2 Автор вопроса
Intern PHP
нашел решение, но все же странное требование.
https://www.php.net/manual/ru/pdostatement.bindpar...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы