gpt4 book ai didi

php - Doctrine 1.2 hydration 因 HYDRATION_RECORD 而失败,但适用于 HYDRATION_ARRAY

转载 作者:可可西里 更新时间:2023-11-01 06:38:39 29 4
gpt4 key购买 nike

我有一段代码可以在 Doctrine_Core::HYDRATION_ARRAY 上完美运行,但在 Doctrine_Core::HYDRATION_RECORD 下会崩溃。该页面加载了大约两分钟,并显示了标准的浏览器错误消息,类似于

Connection to the server was lost during the page load.

(我有本地化的浏览器,所以这不是准确的错误消息,而是经过翻译的)。

使用mysql命令行Show processlist输出

+-----+--------+-----------------+--------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+--------+-----------------+--------+---------+------+-------+------------------+
| 698 | root | localhost:53899 | NULL | Query | 0 | NULL | show processlist |
| 753 | *user* | localhost:54202 | *db1* | Sleep | 102 | | NULL |
| 754 | *user* | localhost:54204 | *db2* | Sleep | 102 | | NULL |
+-----+--------+-----------------+--------+---------+------+-------+------------------+

代码本身:

 $q = Doctrine_Query::create()
->select("fc.*")
->from("Card fc")
->leftJoin("fc.Fact f")
->where("f.deckid=?", $deck_id);
$card = $q->execute(array(), Doctrine_Core::HYDRATE_RECORD);
//Commenting the above line and uncommenting below line leads to an error
//$card= $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);

所以我认为查询没有填充正确的 SQL。然而,$q->getSqlQuery() 输出正确的 SQL,如果通过命令行或 phpMyAdmin 执行,该 SQL 将完美运行。

服务器配置:

Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k mod_wsgi/3.3 Python/2.7.1 PHP/5.2.12
Mysql 5.1.40-community

一切都在本地主机上运行,​​因此这不是连接问题。

该特定查询的数据量非常小 - 大约十几条记录,因此与内存或时间限制无关。 safe_modeoffdisplay_errorsonerror_reporting6135.

有人可以指出我遗漏的一些提示或警告吗?

更新最奇怪的是,它有时会与 HYDRATION_RECORD 一起使用。

更新 2: 当我尝试从查询中获取某些内容时它崩溃了,例如getFirst()。没有获取它可以工作,但我真的不需要我无法获取数据的查询表单。

更新 3:我已经解决了这个问题,但我仍然对发生了什么感兴趣。

更新 4:

SQL查询:

SELECT f.id AS f__id, f.createdat AS f__createdat, f.updatedat AS f__updatedat,
f.flashcardmodelid AS f__flashcardmodelid, f.source AS f__source,
f.content AS f__content, f.md5 AS f__md5
FROM flashcard f
LEFT JOIN fact f2 ON f.id = f2.flashcardid AND (f2.deleted_at IS NULL)
WHERE (f2.deckid = 19413)

输出:

f__id   f__createdat            f__updatedat            f__flashcardmodelid     f__source           f__content
245639 2011-08-05 20:00:00 2011-08-05 20:00:00 179 jpod lesson 261 {"source":"\u7f8e\u5473\u3057\u3044","target":"del...

因此,查询本身是正常的,数据按预期传输。您需要模型定义吗?

更新 5 当使用 HYDRATE_RECORD 运行查询时 httpd.exe 消耗 100% 的 CPU 内核之一。

Final Update 不知道为什么,但现在可以了...没有改变任何东西。当我悬赏这个问题时,它似乎只是在等待。 :) 但是,由于我已经悬赏了,所以如果您知道 HYDRATE_ARRAYHYDRATE_RECORD 之间可能会导致脚本崩溃的区别,我们将不胜感激。

最佳答案

我在以某种方式(print_rvar_dump 等)转储整个记录集或仅转储单个记录时看到了类似的行为。这是由于 Doctrine 使用包含大量循环引用的高结构类层次结构。当您使用 Doctrine_Core::HYDRATION_ARRAY 时,这显然不是真的。

因此,任何提到的函数(但我认为可以通过其他方式重现该函数)将开始一个无限循环,导致 100% 的 CPU 使用率,直到达到终止点。

不知道这对您的情况是否有帮助。

关于php - Doctrine 1.2 hydration 因 HYDRATION_RECORD 而失败,但适用于 HYDRATION_ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065533/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com