$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();
我收到此错误消息。
致命错误:[无活动文件]:0中未捕获的异常“ PDOException”,消息为“您无法序列化或反序列化PDOStatement实例”:0堆栈跟踪:#0 [内部函数]:PDOStatement-> __ sleep()#1 {main}被抛出第0行上的[无活动文件]
最佳答案
问题是-出于某种原因-您试图将PDOStatement
对象存储在$_SESSION
数组中。除非您指定了自定义保存处理程序对象,否则存储在会话中的对象将在会话保存时序列化,并在会话加载时反序列化。因此,存储在会话中的对象必须实现Serializable
接口,而PDOStatement
则不能。PDOStatement
不仅实现了可序列化的接口,还实现了__sleep()
方法,该方法由PHP引擎在序列化时调用,并抛出异常。 (这是您看到的错误)。意思是告诉您不要这样做;)