helloworld 发表于 2008-5-5 17:11:25

关于数据库连接中 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);

Hex 发表于 2008-5-5 17:27:53

没错,使用 AR 才会自动加前缀。
自己写查询语句不会自动增加前缀。

helloworld 发表于 2008-5-5 17:40:08

感谢版主的确认信息!

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

[ 本帖最后由 helloworld 于 2008-5-5 17:43 编辑 ]

Hex 发表于 2008-5-5 17:58:10

PS: 你可以自己拼上前缀,可以取到你的前缀配置变量,然后自己拼接字符串。

phantomsea 发表于 2010-10-4 17:25:14

可是在我本地用query没问题,上线就出问题了……
页: [1]
查看完整版本: 关于数据库连接中 dbprefix 的问题