我希望使用/连接到我的一个控制器和一个模型的不同数据库.我发布此消息,因为在CI论坛上我没有得到回应.
我在database.php中添加了这个:
$db['tdb']['hostname'] = "localhost";//localhost $db['tdb']['username'] = "username";//root $db['tdb']['password'] = "password";//empty $db['tdb']['database'] = "databasename"; $db['tdb']['dbdriver'] = "mysql"; $db['tdb']['dbprefix'] = ""; $db['tdb']['pconnect'] = FALSE; $db['tdb']['db_debug'] = FALSE; $db['tdb']['cache_on'] = FALSE; $db['tdb']['cachedir'] = ""; $db['tdb']['char_set'] = "utf8"; $db['tdb']['dbcollat'] = "utf8_general_ci";
这是我的模特:
load->database('tdb', TRUE); } function FInsert($usernames){ $query = $tdb->query("SELECT * FROM following"); return $query->row(); } } ?>
这是我的控制器的开始:
load->model('tadmin_model');
我收到这个错误:
遇到PHP错误
严重性:注意
消息:未定义的变量:tdb
文件名:models/tadmin_model.php
电话号码: ...
致命错误:在/blablabla/tadmin_model.php上的非对象上调用成员函数query()...
我在这做错了什么?
这里的问题不是使用CodeIgniter的数据库函数,而是使用类中的变量作用域.加载模型时,您将连接到数据库并将结果分配给模型构造函数中的局部变量.当任何函数完成时,将丢弃局部变量.稍后您尝试在$ tdb变量上调用query()方法,该变量已被丢弃并获得错误.
您需要将$ this-> load-> database()的结果存储在构造函数和方法都可用的位置.您可以将$ this-> load-> database()调用移动到控制器方法中,并在每次在模型上调用Tradmin方法时连接到其他数据库.
另一种方法,如果你想让$ tdb可用于模型中的所有方法,那就是在类上使用成员变量,这看起来像这样......
tdb = $this->load->database('tdb', TRUE); } function FInsert($usernames){ $query = $this->tdb->query("SELECT * FROM following"); return $query->row(); } } ?>
希望有所帮助.
吉姆.