如何在 Kohana 3 中将表名作为参数传递给数据库查询

发布于 2024-10-18 23:04:55 字数 788 浏览 2 评论 0原文

我有一个复杂的 3 层查询,我想将表名称作为参数传递。 我使用的代码这样:

DB::query(Database::SELECT, 'SELECT 
    SUM(volume) AS `volumeTotal`, 
    MIN(volume) AS `volumeMin`, 
    MAX(volume) AS `volumeMax`, 
    AVG(volume) AS `volumeAverage`, 
    STD(volume) AS `volumeSD`
FROM (
    SELECT TIMEDIFF (DT,CAST( @dt AS DATETIME )) AS Ival, CAST( @dt AS DATETIME ) AS `start` , @dt := DT AS `stop` , `volume`
    FROM ( SELECT @dt := NULL) dt, 
    ( SELECT * FROM  :table WHERE id = :XID) vals
ORDER BY dt ASC) vI')
    ->param(':table', $tableName)
    ->param(':XID', $ID) 
    ->execute();

它不适合我为此使用查询生成器(而且我认为这不是最佳方式)。 当然,我可能会像“.$tableName.”一样直接在查询中输入参数,但我认为应该有更正确的方法。

问题是:

如何使用 Kohana 将表名作为参数传递给数据库查询?

I have a complex 3 layer query in wich I`d liked to pass table name as parameter.
I use code like this:

DB::query(Database::SELECT, 'SELECT 
    SUM(volume) AS `volumeTotal`, 
    MIN(volume) AS `volumeMin`, 
    MAX(volume) AS `volumeMax`, 
    AVG(volume) AS `volumeAverage`, 
    STD(volume) AS `volumeSD`
FROM (
    SELECT TIMEDIFF (DT,CAST( @dt AS DATETIME )) AS Ival, CAST( @dt AS DATETIME ) AS `start` , @dt := DT AS `stop` , `volume`
    FROM ( SELECT @dt := NULL) dt, 
    ( SELECT * FROM  :table WHERE id = :XID) vals
ORDER BY dt ASC) vI')
    ->param(':table', $tableName)
    ->param(':XID', $ID) 
    ->execute();

It is not suitable for me to use query builder for this (and I think it is not optimal way).
Of course, I may input parameters into query directly like ".$tableName.", but I think there should be a more correct way.

The question is:

How to pass table name as parameter to database query using Kohana?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月静好 2024-10-25 23:04:55

需要使用 DB::expr($tableName) 而不是 $tableName

Need to use DB::expr($tableName) instead of $tableName.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文