【问题标题】:I never use PDO serialize or unrealize. But I got this error: 'You cannot serialize or unserialize PDO instances'我从不使用 PDO 序列化或取消实现。但我收到了这个错误:'你不能序列化或反序列化 PDO 实例'
【发布时间】:2015-03-03 21:07:33
【问题描述】:

我从不在我的项目中使用 PDO,尤其是序列化和反序列化。但是我收到了这个错误。

致命错误:类 'Symfony\Component\HttpKernel\Exception\FlattenException' 未在 /var/www/test/mikroskil/mikroweb/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php 在第 56 行致命错误:带有消息的未捕获异常“PDOException” '你不能序列化或反序列化 PDO 实例'在 [no active 文件]:0 堆栈跟踪:#0 [内部函数]:PDO->__sleep() #1 [内部函数]: session_write_close() #2 {main} 抛出 [no 活动文件] 在第 0 行


这太令人沮丧了。任何人都可以帮助我吗?刷新页面时突然出现。

注意: 我之前有个错误。 我使用带有 POST 方法的表单。然后我在上面开了一个会话。 之后,我得到了这个错误。

启动会话失败:已经由 php 启动($_session 是 设置)。


我试图修复这个错误。但是突然页面显示这个错误

致命错误:类 'Symfony\Component\HttpKernel\Exception\FlattenException' 未在 /var/www/test/mikroskil/mikroweb/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php 在第 56 行致命错误:带有消息的未捕获异常“PDOException” '你不能序列化或反序列化 PDO 实例'在 [no active 文件]:0 堆栈跟踪:#0 [内部函数]:PDO->__sleep() #1 [内部函数]: session_write_close() #2 {main} 抛出 [no 活动文件] 在第 0 行

【问题讨论】:

  • 没错,你不能序列化资源的数据类型,就像你不能序列化文件句柄一样;但看起来您正试图在包含资源的会话中存储一些东西
  • 是的。我已经解决了这个问题。
  • 我只是清除了我的浏览器 cookie :) 谢谢
  • 关于 $Session is already set ,这是因为您已经在代码中的某个位置初始化了会话,因此会话 cookie 已经在标头中发送,因此您无法再次启动会话.

标签: php symfony serialization pdo fatal-error


【解决方案1】:

我最近遇到了这个问题,问题是我将我的模型存储在会话中(其中有活动的 pdo 连接),当请求完成时,php 会自动尝试序列化 $_SESSION 以存储在 tmp 文件中。

主要问题是 PDO 连接无法序列化。如果遇到此问题,您需要检查在哪里序列化任何包含活动 pdo 连接的对象。

【讨论】:

  • 这是正确的答案。我刚刚通过尝试在 $_SESSION 中存储一个带有私有 PDO 对象的类来体验同样的事情。
【解决方案2】:

我找到了这个答案。 您只需要清除浏览器上的 Cookie。 可能之前的错误是创建了一个 cookie 并且无法替换它。 我尝试清除所有浏览器 cookie 并成功!

:)

【讨论】:

  • 这实际上不是一个解决方案。如果请求使您的应用程序崩溃 - 那么应用程序就有问题。
  • 你能给我一个关于那个请求的例子吗?我读过一些cmets。他们说了同样的话。当脚本尝试在包含资源的会话中存储某些内容时,就会出现该错误。所以,我尝试清除我的浏览器缓存和 cookie。它对我有用。
  • "你能给我一个关于那个请求的例子吗?" --- 嗯,正是这个请求使您的应用程序崩溃。您是否看到 stackoverflow.com 因您需要清除缓存的请求而崩溃?或者可能是 gmail.com?
  • 嗯,从来没有。但我看到另一个网页稳定加载,但该页面没有任何内容。但是清除缓存后可以加载。
  • "umm, never" --- 所以,这可能意味着,这就是应用程序的行为方式,不是吗?我的意思是,如果您的应用程序需要您清除 cookies(哎呀,这与“缓存”混淆了),那么您的应用程序就有问题。
【解决方案3】:

我在使用 Medoo PHP 框架时遇到了同样的错误,我意识到你不能编码(序列化)一个 PDOStatement 实例

在我的例子中,我使用 PHP json_encode 对要发送到我的应用程序的数据进行编码,其中部分数据包含 PDOStatement 实例 - 执行数据库操作后返回的数据。我刚刚从我的数据中删除了 PDOStatement 实例,一切正常。

【讨论】:

    【解决方案4】:

    我也得到了这个,但是阅读了这个问题,特别是 zerkms 的回复帮助我在我的代码中找到了问题。清除缓存不是对问题的适当回应!最近重新修改了我的类以使用依赖注入 (?),将它们存储为会话变量不再合适。

    【讨论】:

    • 请编辑您的答案
    • 究竟做了什么来解决这个问题?你确定你以前使用过没有依赖注入的 Symfony 吗?与会话的连接是什么意思?
    • 我的问题是我试图在会话变量中保存带有数据库连接的模型,因此出现“您无法序列化或反序列化 PDO 实例”错误。
    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 2012-01-31
    • 2017-09-10
    • 2012-06-11
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多