我对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
这是因为在数据库中:$ 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();
我不知道为什么会发生这种错误。我查了所有方法都被调用了,我没有发现任何错误。
我通过类Database
中的write方法instance
解决了这个问题
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();
}
我不喜欢这样,但我没有选择。
答案 0 :(得分:0)
我的猜测是你似乎覆盖了compile
,quote
,quote_column
,quote_identifier
,quote_table
或execute
代码中Kohana_Database
的方法或只是调用->execute('dances')
会触发此错误。
不应直接调用compile
方法,它是从execute()
这些函数中的任何一个都将$db
作为第一个参数。不要传递任何内容,因为您要在配置文件中使用数据库集,而不尝试在查询构建器中手动设置它。