【问题标题】:White screen of death on php site for certain query?某些查询在php网站上出现白屏死机?
【发布时间】:2014-01-27 09:27:12
【问题描述】:

嗨,我在我的 php 网站上遇到了白屏死机,这只发生在特定的查询中,我似乎找不到任何错误。我尝试查看 var/logs/apache2 并查找 php 错误日志,但没有。

我正在使用 yii。我有一个列出过滤内容的页面。在我的控制器中,我有一个查询:

     $model= Person::model()->findbyPk('12345');
     $list = $model->contacts;

“联系人”是“人”模型的关系,列表是我应该显示的内容。如果我用键“12345”、“14256”和“23489”查询人,页面将正确显示。但是当我查询一个特定的“10012”时,它会给我一个没有错误和没有样式格式的白屏。只是一个空白屏幕。而且它的加载时间也比其他查询长。我尝试记录它并检查共享数据/运行时,但它甚至不会到达控制器。它只是发生在这个特定的人身上。

这似乎是最可能的原因?

【问题讨论】:

  • 您的数据库中是否存在人员 ID 为 10012 的条目?如果数据库中没有匹配的行,您的 findbyPk() 方法会返回什么?也许你应该在取消引用之前检查$model 看看它是否是一个对象。
  • 你能添加一些调试信息吗?可能如here 所述。尝试使用该特定 id 设置一些单元测试并查看那里报告的任何错误。
  • 在您的 php 应用程序之外运行该查询并查看它返回的内容。白屏通常表示数据过多。
  • 将返回的值保存到会话变量中,使用 id 检查进程是否正常运行,然后转储会话变量,告诉我们结果如何。
  • 抱歉回复晚了,@DanBracuk 是对的。如果您的评论只是一个答案,请支持它。我认为我遇到了太多数据。我确定我有 12345 型号,因为我自己在数据库上检查过它。联系人太多了。

标签: php mysql sql yii error-log


【解决方案1】:

您需要检查是否在 $model 中获得结果。试试这个

$model= Person::model()->findbyPk('12345');
if($model=== NULL)
{
throw new CHttpException('I am empty. Please try another key');
}
else
{
// whatever you wanna do
    }

【讨论】:

    【解决方案2】:

    步骤:

    1) 启用 Yii DEBUG 模式。 2) 在 php 上启用所有错误报告。3) 在 this 的帮助下启用 Yii Profiling。并在使用之前检查 Person 模型,如下所示。

    $model= Person::model()->findbyPk('12345');
    if($model === NULL)
    {
    throw new CHttpException('There is no record with this key.');
    }
    // Normal expected code . 
    

    【讨论】:

    • 抱歉,我确定密钥不是空的。自己查了数据库。如果模型为空,我确定 Yii 会抛出错误“尝试获取非对象属性的属性”,或类似的东西。以前经历过很多次。
    【解决方案3】:

    主要问题是Person 模型的关系contacts 中有太多数据。这种关系是一对多的。解决方案是使用另一种方式/查询获取联系人。

    我仍然不确定的是,为什么当我在运行查询的控制器中登录时,它甚至无法到达控制器。即使日志是在查询运行之前,例如

       function actionListContacts() {
            Yii::log('Ireached this function');
            $request = Yii::app()->request;
            $personId = $request->get('personId');
    
            $model = Person::model()->findByPk($personId);
            // This is where the query for contacts should start..
            $contacts = $person->contacts;
    
            $this->render(['contacts' => $contacts]);
       } 
    

    如果我使用 id '12345',渲染成功,如果我检查日志,我可以看到我的日志。但是当我使用 10012 时,这会导致白页并且我检查了日志,它甚至没有到达控制器。顺便说一句,id '10012' 是存在的,我自己检查了数据库。 :)

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2021-07-25
      • 2017-10-06
      • 2011-10-03
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多