【问题标题】:Codeigniter Active Record (and not only that) peculiar problem on some serverCodeigniter Active Record(不仅如此)某些服务器上的特殊问题
【发布时间】:2011-10-17 09:40:27
【问题描述】:

我在使用 CodeIgniter 的 Active Record 类时遇到了一个奇怪的问题(看起来不仅如此,请检查问题底部的更新),并且这只发生在某些服务器上(属于同一提供者)。发生的情况是查询仅“部分”运行,这意味着从 mysql 数据库中检索结果,但忽略任何 wherejoinselect 子句。

一个简单的例子:

$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 时出错的不是我,因为这些查询可以在本地和其他服务器上正常工作。

我在网上搜索了类似的问题,但似乎我今天不走运或没有良好的 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

虚拟服务器在 Apache/2.2.3 (CentOS) 上运行 PHP 版本 5.1.6。

我能做些什么来解决这个问题?
我是否必须更改 php.INI 中的某些值?
或者我需要修改 CI 的 ActiveRecord 核心吗?

编辑:

在这样的环境中,加载资源(帮助程序、库、模块)似乎也不起作用,除非它们是自动加载的。并且本机重定向()不起作用!我认为他们都被释放了,但我可能会为此提出另一个问题,以防我发现我错了。什么可能导致这种行为?

【问题讨论】:

  • 已发布的列具有整数或 varchar 数据类型?
  • Published 是一个 int 列,但同样适用于 varchars 和任何其他类型。没有 SQL 错误,只是 ActiveRecord “丢失”了查询部分,或者至少看起来是这样

标签: php mysql oop codeigniter activerecord


【解决方案1】:

值得尝试的一个简单的事情是:

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

我记得 Codeigniter 在实际查询中将 exclude '' 包含在 1 附近,具体取决于值是整数、浮点数还是字符串。

您是否使用最新版本的 CodeIgniter?

【讨论】:

  • 是的,我用的是最新的;此外,$this->db->last_query() 返回 FALSE,以防万一问题只是一个不匹配的地方!看起来它没有保留查询部分,我不知道为什么。反正我试过了,还是不行。
猜你喜欢
  • 2012-06-16
  • 2012-08-12
  • 2017-11-30
  • 2011-11-25
  • 2021-12-17
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
相关资源
最近更新 更多