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' とメッセージ 'You cannot serialize or unserialize PDOStatement instances' in [アクティブなファイル]:0 スタック トレース: #0 [内部関数]: PDOStatement->__sleep() #1 {main} がスローされました[アクティブなファイルがありません] 行 0

4

1 に答える 1

8

PDOStatement問題は、何らかの理由でオブジェクトを$_SESSION配列に格納しようとしていることです。カスタム保存ハンドラー オブジェクトを指定しない限り、セッションに保存されるオブジェクトは、セッションの保存時にシリアル化され、セッションの読み込み時にシリアル化されません。Serializableそのため、セッションに格納されるオブジェクトはインターフェースを実装する必要がありますが、そうではありPDOStatementません。

シリアライズ可能なインターフェイスを実装しないだけでなくPDOStatement、メソッドを実装しました。この__sleep()メソッドは、PHP エンジンによるシリアライゼーションで呼び出され、そこから例外をスローします。(これはあなたが見ているエラーです)。これの意味は、それをしないでください;)

于 2013-04-08T12:21:16.973 に答える