В PHP PDO :: PDOStatement-> bindParam () работает так, как ожидается? - PullRequest
0 голосов
/ 18 сентября 2009

Я пробую 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?

1 Ответ

2 голосов
/ 18 сентября 2009

PDO не будет генерировать исключение или выдавать ошибку, но в лучшем случае преобразует параметр в целое число / длинное Например. в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...