关于数据库连接中 dbprefix 的问题
数据库名为china,表前缀为 cn_,有一个表 cn_emails发现通过Active Record的方式写QueryString时可以不带数据表的前缀,
而通过普通方式读取,如果不写上数据表前缀则会出错。
请问配置了dbprefix之后,通过普通的方式连接数据库仍需要在查询语句中写上数据表的全名?
具体如下:
在 config/database.php 中配置了
$active_group = "default";
$active_record = TRUE;
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "xxx";
$db['default']['password'] = "xxx";
$db['default']['database'] = "china";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "cn_";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
并且配置了 autoload.php 让系统启动时自动load database库
在controller中使用以下的代码,运行时会报错:
$queryString = "SELECT * FROM emails";
$query = $this->db->query($queryString);
报错的信息如下:
An Error Was Encountered
Error Number: 1146
Table 'china.emails' doesn't exist
SELECT * FROM emails
如果代码改成通过Active Record方式读取,则可以通过
$this->db->select('*');
$this->db->from('emails');
$query =$this->db->get();
或者把数据表前缀也写上
$queryString = "SELECT * FROM cn_emails";
$query = $this->db->query($queryString);
没错,使用 AR 才会自动加前缀。
自己写查询语句不会自动增加前缀。 感谢版主的确认信息!
前段时间一直用ar写查询,今天才发现有这样的问题。
那就像 $DB1 = $this->load->database('group_one', TRUE);
这样load 进来的配置里边的 dbprefix 是没用的了
[ 本帖最后由 helloworld 于 2008-5-5 17:43 编辑 ] PS: 你可以自己拼上前缀,可以取到你的前缀配置变量,然后自己拼接字符串。 可是在我本地用query没问题,上线就出问题了……
页:
[1]