0

我有以下代码,但我无法弄清楚为什么 CodeIgniter 会在它生成的查询中添加一个额外的通配符。

代码

class Foo_Model extends CI_Model {
  private $table = 'foo';

  public function get_all_foos() {
    $table = $this->table;   
    $this->db->select("$table.*")->from($table);
    return $this->get()->result();
  }
}

我收到以下错误:

发生数据库错误

错误号:1064

您的 SQL 语法有错误;检查与您的 MySQL >server 版本相对应的手册,以在第 1 行的 '* FROM ( foo, foo)'附近使用正确的语法

选择foo.*, * FROM ( foo, foo)

为什么查询生成不正确?

4

3 回答 3

2

如果要选择所有内容,请不要使用该->select()语句。这应该等同于您的预期。

class Foo_Model extends CI_Model {
  private $table = 'foo';

  public function get_all_foos() {
    $table = $this->table;   
    $this->db->from($table);
    return $this->get()->result();
  }
}

请参阅$this->db->get文档中的示例 - http://codeigniter.com/user_guide/database/active_record.html

于 2012-08-10T18:26:25.120 回答
0

如果要选择所有内容,最快的方法是get()直接使用表名。
例如:

class Foo_Model extends CI_Model {
  private $table = 'foo';

  public function get_all_foos() {
   $table = $this->table;
   return $this->db->get($table)->result();
  }
}
于 2012-08-10T23:17:54.453 回答
0

我认为这是 Codeigniter 2.1.2 的错误

这应该适合你:

$this->db->select("`$table`.*",false)->from($table);
于 2012-08-10T23:00:01.417 回答