【发布时间】:2011-10-17 09:40:27
【问题描述】:
我在使用 CodeIgniter 的 Active Record 类时遇到了一个奇怪的问题(看起来不仅如此,请检查问题底部的更新),并且这只发生在某些服务器上(属于同一提供者)。发生的情况是查询仅“部分”运行,这意味着从 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 时出错的不是我,因为这些查询可以在本地和其他服务器上正常工作。
我在网上搜索了类似的问题,但似乎我今天不走运或没有良好的 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