我在CakePHP中遇到了一个奇怪的错误,我不知道如何弄清楚发生了什么。我使用Ajax请求为dataTable加载动态数据,它在我的localhost上运行得很好。由于某种原因,当我有多个条目时,我无法在我的实时服务器上运行它。调试后,我发现find函数不起作用。当我的响应数组中有多个条目时,其中一个数组("SollProject")只是完全为空,整个脚本停止工作。
这是我的代码:
$project = $this->Project->find("first", array('conditions'=>array('id'=>$project_id) ,
'contain' => array(
'SollProject' => array(
'conditions'=> array(
'SollProject.date >=' => $year.'-01-01',
'SollProject.date <=' => $year.'-12-31'
)
),
'HabenProject'=> array(
'conditions'=> array(
'HabenProject.date >=' => $year.'-01-01',
'HabenProject.date <=' => $year.'-12-31'
)
))));
知道我在这里做错了什么吗?或者为什么它不能在实时服务器上工作?如果你想知道的话,没有afterFind方法。
也许我应该提到,我已经尝试过错误调试,但没有收到任何错误消息。我还在sql服务器上尝试了同样的sql代码,它运行得很好。也没有内存问题,因为我使用的内存远远超出了我通常使用的内存,而且它只是一个json响应。函数本身也适用于小条目(可能不超过5个条目),但一旦数据库中有更多条目,它就会崩溃。
有趣的是,我可以debug($project['HabenProject'])
,它向我显示了所有HabenProject,但如果我尝试debug($project['SollProject'])
或仅尝试debug($project)
,则变量为空。它甚至没有声明为数组。只是没有输出。页面的其余部分仍在显示。
基本调试步骤:
- 将debug设置为2
- 查看您的CakePHP应用程序日志
- 检查php日志
- 检查Web服务器日志
然而,我想这是内存限制,调试关闭了,这可能就是为什么你会得到一个白色页面的原因。检查内存使用情况并增加php内存限制。
好吧,经过大量调试,我似乎发现了问题:由于某种原因,数据库中每个带有元音变音符(äüö)的条目都会产生一个错误,导致find函数的结果数组不再工作。事实证明,问题是实时服务器数据库utf-8加密被评论为关闭…