0

我对 Kohana 数据库有疑问。有时我有错误

ErrorException [ Recoverable Error ] 
Argument 1 passed to Kohana_Database_Query_Builder_Select::compile() must be an instance of Database, string given, called in /srv/sites/mysite/www/modules/database/classes/kohana/database/query.php on line 230 and defined

发生这种情况是因为在 Database:$instances 中包含字符串“ dances ”,但应该包含数组数据库配置。

这是我的配置:

<?php defined('SYSPATH') OR die('No direct access allowed.');

return array
(
'default' => array
(
    'type'       => 'MySQL',
    'connection' => array(
        'hostname'   => 'localhost',
        'database'   => 'chat',
        'username'   => 'root',
        'password'   => 'root',
        'persistent' => FALSE,
    ),
    'table_prefix' => '',
    'charset'      => 'utf8',
    'caching'      => FALSE,
    'profiling'    => TRUE
)
);

也许有人有这样的问题或可以帮助我?


对 DB 的任何查询都会导致错误。像这样:

Jelly::factory('user', $user->id())

或这个:

DB::select('value')->from('storage')->where('name', '=', 'salt')->limit(1)->execute();

或这个:

ORM::factory('node')->where('type', '=', 'page-homepage')->find();

我不知道为什么会发生这个错误。我检查了所有方法都被调用了,我没有发现任何错误。

instance我通过类数据库中的 write 方法解决了这个问题

public static function instance($name = NULL, array $config = NULL)
{
    if ($name === NULL)
    {
        // Use the default instance name
        $name = Database::$default;
    }

    if ( ! is_array(Database::$instances))
    {
        Database::$instances = array();
    }

    if ( ! isset(Database::$instances[$name]))
    {
        if ($config === NULL)
        {
            // Load the configuration for this database
            $config = Kohana::$config->load('database')->get($name);
        }

        if ( ! isset($config['type']))
        {
            throw new Kohana_Exception('Database type not defined in :name configuration',
                array(':name' => $name));
        }

        // Set the driver class name
        $driver = 'Database_'.ucfirst($config['type']);

        // Create the database connection instance
        new $driver($name, $config);
    }

    return Database::$instances[$name];
}

我添加条件如您所见

if ( ! is_array(Database::$instances))
{
    Database::$instances = array();
}

我不喜欢这样,但我别无选择。

4

1 回答 1

0

我的疯狂猜测是您似乎正在覆盖代码中的compile, quote, quote_column,或方法,quote_identifier或者只是调用应该会触发此错误。quote_tableexecuteKohana_Database->execute('dances')

compile方法不应直接调用,它是一个内部函数,从execute()

这些函数中的任何一个都$db作为第一个参数。不要传递任何东西,因为您想使用配置文件中设置的数据库,而不是尝试在查询构建器中手动设置它。

于 2013-02-13T10:11:31.997 回答