Codeigniter查询冲突

时间:2017-02-14 22:48:44

标签: mysql ajax codeigniter session

我发生了一些非常奇怪的事情。

看起来我有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;
    }
}

确保始终将“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;

}

我在这里做错了什么?

0 个答案:

没有答案