У меня странная проблема при использовании класса 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();
На самом деле не работает, потому что я получаю ВСЕ поля и ВСЕ результаты, даже те, у которых «опубликовано» = «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->last_query()
, он возвращает FALSE (bool); Единственный способ заставить его работать, это использовать стандартный синтаксис mysql и делать что-то вроде
$sql = "SELECT title,intro FROM content WHERE published = '1'";
$query = $this->db->query($sql);
Это работает без проблем.
Поскольку у меня большой опыт работы с CodeIgniter, я не думаю, что я сам делаю ошибки при использовании AR, поскольку этот запрос работает локально и на других серверах без проблем.
Я искал в сети похожие проблемы, но, похоже, сегодня мне не повезло или у меня хорошие навыки гугл-фу. Я даже не знаю, что может пойти не так, поскольку файлы журналов не показывают никаких ошибок, и я даже не знаю, что искать в 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?
Edit:
В такой среде кажется, что загрузка ресурсов (помощников, библиотек, модулей) также не работает, если они не загружены автоматически. И родной редирект () не работает! Я думаю, что они все освобождены, но я мог бы открыть другой вопрос для этого, если я узнаю, что я не прав. Что может вызвать такое поведение?