В PHP работает ли PDO::PDOStatement-> bindParam() так, как ожидается?

StackOverflow https://stackoverflow.com/questions/1445540

  •  22-07-2019
  •  | 
  •  

Вопрос

Я впервые пробую PDO на PHP.Я подумал, что PDOStatement-> bindParam() было бы отличным способом задать типы данных значений, которые я передаю в sql-запрос.Но почему-то у меня это не работает.Например, я устанавливаю тип переменной в значение INT при вызове bindParam.Но он по-прежнему не выдает ошибку, даже когда я передаю ему чистые строковые значения.Может быть, я делаю что-то не так.Вот фрагмент кода..

$query = "select * from PDO_TABLE where A_COLUMN = :test1 or B_COLUMN = :test2";

$test1 = '0';
$test2 = 'a';
$preparedStatement = $conn->prepare($query);

echo $preparedStatement->bindParam(':test1', $test1, PDO::PARAM_INT);
echo $preparedStatement->bindParam(':test2', $test2, PDO::PARAM_INT);

$preparedStatement->execute();

Все ли я делаю правильно?Разве это не должно выдавать ошибку для параметра test2?

Это было полезно?

Решение

PDO не будет выдавать исключение или выдавать ошибку, но в лучшем случае преобразует параметр в целое число / long.Например.в pdo_stmt.c:

if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_INT && Z_TYPE_P(param->parameter) == IS_BOOL) {
  convert_to_long(param->parameter);
}

т. е.если вы зарегистрировали параметр как PDO_INT, но переменная содержит логическое значение, PDO преобразует bool в int/long .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top