【问题标题】:Database query in Kohana only shows the SQL and not the result rowsKohana 中的数据库查询仅显示 SQL 而不是结果行
【发布时间】:2011-11-09 22:56:32
【问题描述】:

我刚开始使用 Kohana 框架,我正在尝试执行一些查询,但是在花费了几个小时的文档并运行了一些测试之后,我所拥有的只是:

class Controller_Test extends Controller {
    public function action_index()
    {
       $query = DB::select()->from('test')->where('test', '=', '1');
       echo $query  
    }
}

现在,如果尝试运行它,它所做的只是回显我的 SQL。

如何从我的数据库中获取实际数据?我知道我可以这样做:

$row = mysql_fetch_row(mysql_query($query));
echo $row[0];

它会起作用的;但我想这完全是愚蠢的,因为我使用的是一个框架,并且必须有内置的方法。

【问题讨论】:

标签: php kohana kohana-3 kohana-db


【解决方案1】:

您应该知道您实际上是在构建 Database_Query 对象,所以最终必须有一些东西来执行它,对吧?

$results = DB::select('*')->from('table')->execute();

然后你可以正常循环这些:

foreach ($results as $result) { echo $result->id; }

【讨论】:

  • 我试过运行你的代码,但是我得到这个错误 ErrorException [ Notice ]: Trying to get property of non-object
【解决方案2】:

构建查询后,您需要使用 execute() 方法将其转换为 Database_Query 对象,以便获取要运行的值。

如果要将查询结果作为数组处理,可以在execute之后添加as_array()方法,如下所示:

$query = DB::select()->from('test')->where('test', '=', '1')
                     ->execute()->as_array();

如果您只处理单行,并且知道您只需要单行,则可以将其更改为 current()

$query = DB::select()->from('test')->where('test', '=', '1')
                     ->execute()->current();

然后你可以在遍历数组时根据需要提取:

foreach ($query as $row)
{
    echo $row['title'];
}

【讨论】:

  • 另外,如果在 Database_Query::execute() 之前使用 Database_Query::as_object() Database_Result::current() 将返回一个对象而不是数组,并且 Database::as_array() 将返回对象数组。
【解决方案3】:

获取行:

$query = DB::select('p.id')
            ->select_array(array('p.title', array('p.title', 'pocket') ))
            ->from(array($this->_table_name, 'p'))
            ->limit(1);

echo $query->execute()->get('id');

显示查询:

echo $query->compile();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多