【问题标题】:right-hand-side MySQL functions in DBIx::ClassDBIx::Class 中的右侧 MySQL 函数
【发布时间】:2010-12-18 00:53:19
【问题描述】:

在 DBIx::Class 中,当我使用此语法生成查询时:

...
'Time(submitted_at)' => { '>' => 'Time(Now()-Interval ' . $wait_period . ' minute)' }
...

生成的查询是完美的,除了右边的函数用引号引起来。

... AND ( Time(submitted_at) > 'Time(Now()-Interval 5 minute)' ) ...

如果它没有被引用,那么它是正确的。我该怎么做?

谢谢, 抢

【问题讨论】:

    标签: mysql perl dbix-class


    【解决方案1】:

    seems 表示,如果您想使用文字 SQL,则执行表达式的方法是传递标量 ref 或数组 ref。

    这是一个示例,展示了在表达式中使用 $wait_period 变量的查询参数:

    ...
    'Time(submitted_at)' => { '>' => \['Time(Now()-Interval ? Minute)', $wait_period] }
    ...
    

    【讨论】:

    • +1 用于使用查询参数而不是纯字符串连接
    【解决方案2】:

    将字符串作为标量引用传递:

    ...
    'Time(submitted_at)' => \"> Time(Now()-Interval $wait_period minute)" 
    ...
    

    【讨论】:

    • 感谢您的回复。我似乎无法弄清楚为什么它不以这种方式解释引用。有了上面(根本没有改变)我得到这个SQL生成:...(Time(submitted_at)>'SCALAR(0x108b8cd8)')...
    • 嗯,我猜它只喜欢哈希顶层的标量引用。我已经相应地修改了我的答案,它现在有效吗?
    • 是的,我刚刚想通了,正要发布它,但你打败了我。感谢您的帮助!
    猜你喜欢
    • 2012-08-11
    • 2011-07-09
    • 1970-01-01
    • 2016-08-25
    • 2017-06-19
    • 2013-01-21
    • 2013-03-08
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多