【问题标题】:In PHP does the PDO::PDOStatement->bindParam() work as it is expected?在 PHP 中,PDO::PDOStatement->bindParam() 是否按预期工作?
【发布时间】:2010-11-29 13:17:42
【问题描述】:

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

$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抛出错误吗?

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    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 会将布尔值转换为 int/long。

    【讨论】:

    • ohh..k..有没有办法知道最终使用什么查询从数据库中获取结果。即我可以知道有问题的变量的值最终传递给查询吗?
    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多