0
$s = &$_SESSION;

在准备语句中使用会话变量时,我收到了下面提到的错误。

// $s 是一个会话变量

我的查询是:

$s['sQuery'] = 'SELECT * FROM `courses` WHERE (CONVERT(`title` USING utf8) = :search 
OR CONVERT(`description` USING utf8) = :search OR CONVERT(`duration` USING utf8) = :search
OR CONVERT(`fees` USING utf8) = :search OR CONVERT(`pre_requisites` USING utf8) = :search)
LIMIT '.$s['limitInc'].', '.$s['limit'];

$s['rQuery'] = $conn->prepare($s['sQuery']);

$s['rQuery']->bindValue(':search',$s['sAll'],PDO::PARAM_STR);
// $s['All'] has post value by user

$s['rQuery']->execute();

我收到此错误消息。

致命错误:未捕获的异常“PDOException”与消息“您无法序列化或反序列化 PDOStatement 实例”在 [无活动文件]:0 堆栈跟踪:#0 [内部函数]:PDOStatement->__sleep()#1 {main} 抛出[无活动文件] 第 0 行

4

1 回答 1

8

问题是——无论出于何种原因——你试图在数组中存储一个PDOStatement对象。$_SESSION除非您指定了存储在会话中的自定义保存处理程序对象,否则将在会话保存时序列化并在会话加载时反序列化。因此,存储在会话中的对象必须实现Serializable接口,而PDOStatement没有。

不仅没有实现可序列化接口,PDOStatement还实现__sleep()了 PHP 引擎在序列化时调用的方法,并从中抛出异常。(这是您看到的错误)。这样做的意思只是告诉你不要那样做;)

于 2013-04-08T12:21:16.973 回答