CodeIgniter - $ this-> db-> from не добавил 'из x_table' к окончательному запросу, несколько раз не выполнялось при полной навигации по сайту - PullRequest
0 голосов
/ 18 октября 2018

Сегодня я наблюдаю очень странное поведение и не знаю, что с этим делать.Мы использовали codeigniter на нашем сайте уже более года, и сегодня, когда я нажал на одну из наших страниц, я увидел ошибку базы данных, показанную мне.Я быстро открыл контроллер для этой страницы и обновился, чтобы увидеть его снова, но на этот раз этого не произошло, и я не смог заставить его снова сработать там.

Хмм, тревожно.

Я перешел на несколько других страниц, и это случилось снова на другой, на этот раз я посмотрел, где он потерпел неудачу, и он умер при запросе, подобном следующему:

SELECT `foo`.`ID_NO` JOIN `bar` ON `bar`.`foo_ID` = `foo`.`ID_NO` WHERE `someSetting` = 0 AND `bar`.`Filter_ID` = '123'

... подождите секунду, где же«ОТ foo», что должно быть там?

Я посмотрел на мой контроллер моделей, и он попытался выполнить следующие строки кода:

$this->db->select("foo.ID_NO");
$this->db->from('foo');
$this->db->join('bar','bar.foo_ID = foo.ID_NO');

Это код, который работалв течение года и ошибки, подобной этой, нигде раньше не было.Очень похоже, что «$ this-> db-> from ('foo');"просто не произошло.

Я перешел на кучу других страниц сайта, и это происходило несколько раз, опять та же проблема, когда запрос не был правильно построен и была выдана ошибка базы данных.При обновлении ошибка всегда уходила.Я не видел повторения на каких-либо страницах, и при этом я не видел пропуск страницы и затем сбой в более позднее время.

Есть две вещи, которые могут быть фактором: во-первых, я недавно добавил ошибку /обработчик исключений (но, насколько я могу судить, это не должно влиять на это, особенно не один раз, а затем и не снова).

Во-вторых, когда я начал использовать обработчик ошибок / ошибок, я обнаружил в CodeIgniters ошибку, которая была известна и исправлена ​​путем изменения функции «is_loaded ($ class = '')» на «function & is_loaded ($ class = ').') "в Common.php из-за ошибки, произошедшей в Loader.php:« $ this -> _ base_classes = & is_loaded (); ».Это исправление, похоже, получило широкое признание, и ошибка, с которой я сталкиваюсь, не повторяется и, кажется, не связана, поэтому я также не верю, что это является причиной.

Я использую CodeIgniter версии 2.1.2,Кто-нибудь видел что-нибудь подобное раньше?Я не могу себе представить, в чем причина этого, но я не хотел бы, чтобы это происходило вне среды разработки, где я видел, что это происходит сегодня.

РЕДАКТИРОВАТЬ: Кроме того, моя необычная новая система регистрации ошибок, которую я упомянул, не сделалапротоколировать все, что пошло не так в функции db-> from: (

1 Ответ

0 голосов
/ 18 октября 2018

Причиной было то, что мой обработчик ошибок сработал из-за ссылки на несуществующий индекс:

if($post_array['query'] != ""){

Регистратор ошибок затем собрал информацию и вставил в базу данных.Я предполагаю, что он использует то же поле $ this-> db-> ar_from, когда вы вставляете этот путь:

$this->db->insert('error_logging', $data);

Затем очищает его впоследствии, как и после любого успешного запроса.

Затем код вернулся на свою прежнюю позицию с полями ar_select, ar_like и т. Д., Но не с ar_from, и перешел на команду $ this-> db-> get (), которая завершилась неудачно.

При последующих загрузках страницыошибка уже была зарегистрирована в БД, и поэтому новая вставка не была выполнена, и построитель запросов не был подделан, и поэтому нет новых ошибок базы данных.

Исправление состояло в том, чтобы просто получить клон $ this-> БД и использовать этот клон для вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...