У меня возникает странная проблема при использовании класса Active Record класса CodeIgniter ( похоже, не только это, проверьте обновление в нижней части вопроса ), и это происходит только на некоторых серверах (принадлежащих одному и тому же провайдеру). Случается, что запрос выполняется только «частично», что означает, что результаты извлекаются из базы данных mysql, но любое предложение where
или join
или select
игнорируется.
Простой пример:
$this->db->select('title,intro'); $this->db->from('content'); $this->db->where('published','1'); $query = $this->db->get();
Doens't действительно работает, потому что я получаю ВСЕ поля и ВСЕ результаты, даже те, у кого «опубликовано» = «0». Чем сложнее запрос, тем хуже результат.
Кроме того, то же самое происходит с любым типом данных поля, поэтому не нужно использовать INT и запрашивать строку. Выше было всего лишь образец, это случается с более «сложными» запросами, такими как
$this->db->where('category','events'); $this->db->where('published','1'); $this->db->order_by('date','desc'); $this->db->limit($limit, $offset); $query = $this->db->get('newsletter');
по$this->db->where('category','events'); $this->db->where('published','1'); $this->db->order_by('date','desc'); $this->db->limit($limit, $offset); $query = $this->db->get('newsletter');
Если я вызываю $this->db->last_query()
он возвращает FALSE (bool); Единственный способ заставить его работать – использовать стандартный синтаксис mysql и делать
$sql = "SELECT title,intro FROM content WHERE published = '1'"; $query = $this->db->query($sql);
Это работает без проблем. Поскольку у меня много опыта в CodeIgniter, я не думаю, что это я делаю ошибки в использовании AR, так как этот запрос работает локально и на других серверах без проблем.
Я искал сеть для подобных проблем, но мне кажется, что мне не повезло или хорошие навыки google-fu сегодня. Я даже не знаю, что может быть неправильным, поскольку файлы журнала не показывают никакой ошибки, и я не знаю, что искать в php.ini. Во всяком случае, здесь есть некоторые значения INI, которые могут быть задействованы, но я не знаю:
allow_call_time_pass_reference Off Off allow_url_fopen On On always_populate_raw_post_data Off Off auto_globals_jit On On browscap no value no value define_syslog_variables Off Off disable_classes no value no value disable_functions no value no value display_errors Off Off enable_dl On On error_reporting 2047 2047 html_errors On On ignore_repeated_errors Off Off ignore_repeated_source Off Off ignore_user_abort Off Off implicit_flush Off Off log_errors On On magic_quotes_gpc On On magic_quotes_runtime Off Off magic_quotes_sybase Off Off register_argc_argv Off Off register_globals On On register_long_arrays On On safe_mode Off Off safe_mode_exec_dir no value no value safe_mode_gid Off Off safe_mode_include_dir no value no value
Mysql:
Active Persistent Links 2 Active Links 2 Client API version 5.0.77 mysql.allow_persistent On On mysql.connect_timeout 60 60 mysql.max_links Unlimited Unlimited mysql.max_persistent Unlimited Unlimited mysql.trace_mode Off Off
Виртуальный сервер запускает PHP версии 5.1.6 на Apache / 2.2.3 (CentOS).
Что я могу сделать для решения проблемы?
Должен ли я изменить значение в php.INI?
Или мне нужно изменить ядро ActiveRecord CI?
В такой среде кажется, что загрузка ресурсов (помощников, библиотек, модулей) не работает, если они не загружены автоматически. А родной redirect () не работает! Я думаю, что они все переписаны, но я могу открыть для этого еще один вопрос, если я узнаю, что я ошибаюсь. Что может вызвать такое поведение?