PDO语句与工作会话?

时间:2013-04-08 12:16:36

标签: php mysql pdo

$s = &$_SESSION;

我在prepare语句中使用会话变量时遇到了下面提到的错误。

// $ 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();

我收到此错误消息。

  

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

1 个答案:

答案 0 :(得分:8)

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

PDOStatement不是实现可序列化接口,而是实现了__sleep()方法,该方法在PHP引擎的序列化中调用,并抛出异常。 (这是你看到的错误)。这意味着只是告诉你不要那样做;)