用户
 找回密码
 入住 CI 中国社区
搜索
查看: 10337|回复: 4
收起左侧

关于数据库连接中 dbprefix 的问题

[复制链接]
发表于 2008-5-5 17:11:25 | 显示全部楼层 |阅读模式
数据库名为china,表前缀为 cn_,有一个表 cn_emails

发现通过Active Record的方式写QueryString时可以不带数据表的前缀,
而通过普通方式读取,如果不写上数据表前缀则会出错。

请问配置了dbprefix之后,通过普通的方式连接数据库仍需要在查询语句中写上数据表的全名?

具体如下:

在 config/database.php 中配置了
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中使用以下的代码,运行时会报错:
PHP复制代码
$queryString = "SELECT * FROM emails";
$query = $this->db->query($queryString);
复制代码


报错的信息如下:
  1. An Error Was Encountered
  2. Error Number: 1146

  3. Table 'china.emails' doesn't exist

  4. SELECT * FROM emails
复制代码


如果代码改成通过Active Record方式读取,则可以通过
PHP复制代码
$this->db->select('*');
$this->db->from('emails');
$query =$this->db->get();
复制代码


或者把数据表前缀也写上
PHP复制代码
 
$queryString = "SELECT * FROM cn_emails";
$query = $this->db->query($queryString);
 
复制代码
发表于 2008-5-5 17:27:53 | 显示全部楼层
没错,使用 AR 才会自动加前缀。
自己写查询语句不会自动增加前缀。
 楼主| 发表于 2008-5-5 17:40:08 | 显示全部楼层
感谢版主的确认信息!

前段时间一直用ar写查询,今天才发现有这样的问题。
那就像 $DB1 = $this->load->database('group_one', TRUE);
这样load 进来的配置里边的 dbprefix 是没用的了

[ 本帖最后由 helloworld 于 2008-5-5 17:43 编辑 ]
发表于 2008-5-5 17:58:10 | 显示全部楼层
PS: 你可以自己拼上前缀,可以取到你的前缀配置变量,然后自己拼接字符串。
发表于 2010-10-4 17:25:14 | 显示全部楼层
可是在我本地用query没问题,上线就出问题了……

本版积分规则