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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
03 мая 2024, в 14:52
100000 руб./за проект
03 мая 2024, в 14:40
1000 руб./за проект