В PHP работает ли PDO::PDOStatement-> bindParam() так, как ожидается?
Вопрос
Я впервые пробую 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 .