Похоже, у меня есть 2 активных запроса к записи, которые конфликтуют и смешивают имена таблиц и операторыwhere.
Я использую Codeigniter и пытаюсь сохранить сеанс в базе данных. Я хочу иметь возможность получать информацию о пользователе из этого сеанса.
Я расширил свои контроллеры, чтобы хранить пользовательские данные и идентификатор сеанса в переменной, которую я могу использовать где угодно:
Код: Выделить всё
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);
}
}
Во всех запросах к базе данных пользователей я применяю следующую функцию:
Код: Выделить всё
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;
}
}
Эта функция:
Код: Выделить всё
$user = $this->user_model->user();
Раньше это делалось:
Код: Выделить всё
return array_shift($this->session->userdata('user_data');
Код: Выделить всё
return $user = $this->get_user_by_session_id($sessionId)->user_data;
Операторwhere из этого запроса попадает в исходный запрос, который должен был получить пользовательские данные, он также влияет на соединения из этого запроса, смешивая имена таблиц:
Код: Выделить всё
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;
}
Подробнее здесь: https://stackoverflow.com/questions/422 ... -colliding
Мобильная версия