在PHP中,PDO :: PDOStatement-> bindParam()是否按预期工作?

时间:2009-09-18 16:13:23

标签: php pdo

我是第一次在PHP中尝试PDO。我认为PDOStatement-> bindParam()将是一种很酷的方式来设置我传递给sql查询的值的数据类型。但不知怎的,它对我不起作用。例如,我在bindParam调用中将变量的类型设置为INT。但即使我将纯字符串值传递给它,它仍然不会抛出错误。也许我做错了什么。这是代码的片段..

$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 个答案:

答案 0 :(得分:2)

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。