我有一些非常奇怪的事情发生 .

看起来我有2个活动记录查询冲突并混合表名和where语句 .

我正在使用Codeigniter,我正在尝试将会话存储在数据库中 . 我希望能够从该会话中检索用户信息 .

我已经扩展了我的控制器以将userdata和sessionId存储在我可以在任何地方使用的变量中:

class MY_Controller extends CI_Controller {

    public $User = false;
    public $UserLoopCount = 0;
    public $SessionId = false;

    public function __construct() {
        parent::__construct();

        $this->SessionId = $this->session->userdata('session_id');
        $this->User = $this->user_model->user($this->SessionId);

    }

}

我的所有数据库表都有一个名为“AccountId”的字段,用于说明数据所属的用户帐户 .

在我的所有用户数据库查询中,我正在应用以下函数:

public function accountLock($alias=false) {
    $user = $this->user_model->user();
    echo $this->User;
    if($user) {
        $alias === false ? $this->db->where("AccountId =", "{$user->AccountId}") : $this->db->where("{$alias}.AccountId =", "{$user->AccountId}");          
    } else {
        return false;
    }
}

这确保了“where AccountID = $ AccountId”始终添加到用户查询中 .

这个功能:

$user = $this->user_model->user();

应该从数据库中获取userdata,这样我就可以在查询的where语句中访问AccountId,例如获取用户要查看的记录 .

它曾经这样做:

return array_shift($this->session->userdata('user_data');

所以对于数据库我把它切换到这个:

return $user = $this->get_user_by_session_id($sessionId)->user_data;

这就是事情开始变得怪异的地方 . 如果我通过URL正常加载页面一切正常 . 一旦我通过Ajax这样做,我就会遇到查询冲突 .

此查询的where语句最终在需要获取用户数据的原始查询中,它还通过混合表名来影响该查询的JOIN:

public function get_user_by_session_id($sessionId) {

    $this->db->start_cache();
    $this->db->where("session_id =", $sessionId); // THIS WHERE STATEMENT ENDS UP IN ORIGINAL QUERY THAT CALLED TO GET THE USER INFO
    $query = $this->db->get("active_users");
    $this->db->stop_cache();
    $this->db->flush_cache();

    echo $this->db->last_query();

    return $query->num_rows() > 0 ? $query->row() : false;

}

我在这做错了什么?