繁体   English   中英

无法将值绑定为 INT 与 PDO pgsql 驱动程序

[英]Cannot bind value as INT with PDO pgsql driver

我正在运行以下代码:

$pdo = new PDO('pgsql:host=localhost;port=5432', 'postgres', 'postgres');

$statement = $pdo->prepare("
    SELECT ST_AsText(
        ST_Transform(
            ST_GeomFromText('POINT(0 0)', 2154),
            ?
        )
    )
");

$statement->bindValue(1, 4326, PDO::PARAM_INT);
$statement->execute();

并收到以下错误:

PDOException:SQLSTATE [XX000]:内部错误:7 错误:无法解析项目字符串“4326”

查看ST_Transform()的定义,我可以看到问题是 PostgreSQL 得到? 占位符值作为text而不是integer ,我可以通过在psql CLI 中运行这些查询来重现:

这工作正常:

    SELECT ST_AsText(
        ST_Transform(
            ST_GeomFromText('POINT(0 0)', 2154),
            4326
        )
    )

这给出了错误:

    SELECT ST_AsText(
        ST_Transform(
            ST_GeomFromText('POINT(0 0)', 2154),
            '4326'
        )
    )

因此, pgsql PDO 驱动程序很可能会忽略赋予bindValue()PDO::PARAM_INT类型,并始终将参数作为字符串传递。 我尝试打开和关闭PDO::ATTR_EMULATE_PREPARES ,结果相同。

这是 PDO pgsql驱动程序的已知问题吗? 还是我错过了什么?

根据 PDO pg 驱动程序的源代码,驱动程序为每个参数添加引号,无论其类型如何。

这是一个非常古老的行为,甚至被报告为 bug ,但该报告被驳回,因为这是驱动程序的预期行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM