我一直在考虑使用$_SESSION
,我的想法是在一次AJAX调用期间制作一个PDO Prepared语句,然后检索它以进行后续的AJAX调用。我无法理解为什么有关的$_SESSION
密钥的旧值似乎没有被新值(Prepared Statement)取代......或者更确切地说是,但仅限于在第一个AJAX调用的持续时间(创建预备语句的那个)。
后续的AJAX调用不仅没有找到Prepared Statement,而且还倾向于显示其他键,例如,值是一个简单的字符串,也没有存储。
然后我读了that PDO Prepared Statements can't in fact be stored in $_SESSION
...所以我替换了SQL查询(即字符串)...并在$_SESSION
中存储了那个 - 我的问题是已解决:我可以在下一次AJAX调用中检索它。
我觉得令人费解的是,在任何地方都没有提示此错误(存储非法内容,从而阻止密钥接受新值)。正如我所说,第一次通话允许你在通话期间存储非法的东西!
所有这些实际上让我进行了疯狂的追逐,研究PHP会话的工作原理。有没有人知道检测此错误的方法,因此可以记录/标记?
注意我已设置set_error_handler
和set_exception_handler
。但这个"无声错误"在调用之间似乎发生了相当惊人的事情:也就是说,当框架或其他任何东西试图序列化它现在在$_SESSION
中找到的对象时...并发现它不能,所以只是挂断电话,从各方面来看,说'不,我回去了之前的$_SESSION
版本"。有些PHP专家可以确认这种行为吗?
关于错误捕获级别的NB2:在最大PDO错误捕获($dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
)和最大PHP错误捕获(error_reporting(E_ALL)
)时会发生同样的行为。