【问题标题】:Binding parameters to postgres query in Perl using names使用名称将参数绑定到 Perl 中的 postgres 查询
【发布时间】:2012-03-23 19:58:47
【问题描述】:

我正在使用 Perl 脚本,我想使用命名参数在 Postgres 数据库中执行查询。 DBI documentation 说这不是便携式的:

除了 ? 之外,一些驱动程序还允许使用 :name 和 :N(例如 :1、:2 等)等占位符,但它们的使用不可移植

无论如何我都愿意这样做。有谁知道 Postgres 驱动程序是否实现了该功能?

而不是像这样执行查询:

 $q = $pg->prepare($query);
 $q->bind_param(1, "value");
 $q->bind_param(2, "value");
 $q->execute();

我想做这样的事情:

 $q = $pg->prepare($query);
 $q->bind_param("parameterX", "value");
 $q->bind_param("parameterY", "value");
 $q->execute();

干杯!

编辑

正确的语法如下(我漏掉了冒号):

 $q = $pg->prepare($query);
 $q->bind_param(":parameterX", "value");
 $q->bind_param(":parameterY", "value");
 $q->execute();

【问题讨论】:

    标签: perl postgresql dbi


    【解决方案1】:

    It is supported,但不鼓励:

    最后的占位符类型是“命名参数”,格式为“:foo”。虽然 DBD::Pg 支持此语法,但不鼓励使用它以支持美元符号数字。

    不同类型的占位符不能在一个语句中混合使用,但您可以为每个语句句柄使用不同的占位符。这充其量是令人困惑的,所以在你的程序中坚持一种风格。

    【讨论】:

    • 确实有效。我的参数名称前缺少冒号。
    • @Andre:编号为 $n 样式的占位符推荐用于 PostgreSQL,因为在使用 PostgreSQL 数组时使用了:stackoverflow.com/a/8627741/479863
    • 我理解这个建议,但是当涉及到像 30 个参数这样的东西时,我宁愿直呼它们的名字并且马上知道我在看什么。不过,感谢您的链接。
    【解决方案2】:

    Postgres 驱动程序位于模块 DBD::Pg 中(离线文档:perldoc DBD::Pg)。

    【讨论】:

    • 这个“答案”包含的信息与声明“水是湿的”一样多
    猜你喜欢
    • 2010-11-06
    • 2015-08-12
    • 1970-01-01
    • 2013-07-26
    • 2017-05-31
    相关资源
    最近更新 更多