Codeigniter Active Record (и не только это) своеобразная проблема на каком-то сервере - PullRequest
0 голосов
/ 01 августа 2011

У меня странная проблема при использовании класса 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:

В такой среде кажется, что загрузка ресурсов (помощников, библиотек, модулей) также не работает, если они не загружены автоматически. И родной редирект () не работает! Я думаю, что они все освобождены, но я мог бы открыть другой вопрос для этого, если я узнаю, что я не прав. Что может вызвать такое поведение?

1 Ответ

0 голосов
/ 01 августа 2011

Вместо этого стоит попробовать одну простую вещь:

$this->db->where('published', 1);

Я напоминаю, что Codeigniter либо включает исключение '' около 1 в фактическом запросе, в зависимости от того, является ли значение целым числом, с плавающей запятой или строкой.

Используете ли вы последнюю версию CodeIgniter?

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