当存在多个条目时,CakePHP find方法在实时服务器上崩溃


CakePHP find method crashes on live server when more than a few entries

我在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加密被评论为关闭…