【问题标题】:Select in 2 databases with Kohana PHP使用 Kohana PHP 在 2 个数据库中进行选择
【发布时间】:2014-09-01 21:22:25
【问题描述】:

如何在 Kohana 中 JOIN 不同数据库中的表?

$tb_new = 'db_zaboo_feed.feed_' . $feed;
            $ids = DB::query(Database::SELECT, 
                             "SELECT d.fuid_id, d.user_id FROM db_zaboo.displays d
                             LEFT JOIN $tb_new f ON(d.fuid_id = f.uid)
                             WHERE d.user_id = (SELECT user_id FROM $tb_new GROUP BY user_id) AND f.uid IS NULL")->execute();

错误:

Database_Exception [ 1146 ]: Table 'db_zaboo.displays' doesn't exist [ SELECT d.fuid_id, d.user_id FROM db_zaboo.displays d LEFT JOIN db_zaboo_feed.feed_3 f ON(d.fuid_id = f.uid) WHERE d.user_id = (SELECT user_id FROM db_zaboo_feed.feed_3 GROUP BY user_id) AND f.uid IS NULL ]

【问题讨论】:

  • 不是 Kohana 用户,但这应该是不可能的。该查询在连接到特定数据库时被调用。您需要运行两个连接,然后自己执行两个单独的查询和逻辑
  • From 指定数据库so: "->execute($this->_db_group);"但不知道如何两个数据库

标签: php database kohana kohana-3.3 mysql-error-1146


【解决方案1】:

这不是 Kohana 特定的问题。这是一个 MySQL 问题。

要在同一个查询中对多个数据库进行操作,您必须使用表名及其数据库名。如:

SELECT * FROM database1.table1 WHERE database1.table1.id IN (SELECT table1_id FROM database2.table2)

请注意:通过逐字编写查询,我不确定 Kohana 的查询构建器是否能像使用查询构建器的特定功能构建 SQL 查询那样防止 SQL 注入攻击。我会使用函数mysql_real_escape_string 来阻止它

【讨论】:

    【解决方案2】:

    要使用不同的数据库配置组,请将名称或配置对象传递给 execute()。

    $result = $query->execute('config_name')

    http://kohanaframework.org/3.0/guide/database/query/builder#executing http://kohanaframework.org/3.0/guide/database/config#connection-settings

    【讨论】:

    • From 指定数据库so: "->execute($this->_db_group);"但不知道如何两个数据库
    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多