Запросы Codeigniter конфликтуютPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Запросы Codeigniter конфликтуют

Сообщение Anonymous »

У меня происходит что-то действительно странное.

Похоже, у меня есть 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);

}

}
Во всех моих таблицах базы данных есть поле «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();
Предполагается получить данные пользователя из базы данных, чтобы я мог получить доступ к AccountId в оператореwhere запроса, например получить записи для просмотра пользователем.

Раньше это делалось:

Код: Выделить всё

return array_shift($this->session->userdata('user_data');
Итак, для базы данных я переключил ее на это:

Код: Выделить всё

return $user = $this->get_user_by_session_id($sessionId)->user_data;
И здесь все становится странным. Если я загружаю страницы нормально через URL, все работает нормально. Как только я делаю это через Ajax, у меня возникают конфликты запросов.

Оператор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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»