2017-06-09 9 views
0

結果変数をセッション変数に保存する際に問題が発生します。セッション変数に結果オブジェクト(実際の結果ではない)を保存する方法があるかどうか、DBに別の旅行をせずに自分のサイトの他の領域で使用できるかどうか疑問に思っています。理論的には、イムは、やろうとして以下:私はそれは結果ではなく、空のオブジェクトを戻すされ、これを実行するとセッション変数 - mysqli_query result

while ($rows = mysqli_fetch_assoc($_SESSION['test'])){...} 

$formQ2 = mysqli_query($dbconnection, $formQuery3); 
$_SESSION['test'] = $formQ2; 

は、私は、このようなセッション変数を使用したいですオブジェクト。繰り返しますが、実際の結果をセッションに保存するのではなく、結果オブジェクトを他のページでループすることができます。ありがとうございました。

私がフォローするかどうか分かりますので、うまくいきます。ちょうど私のコードの残りが正しいことを知っているように。 while ($rows = mysqli_fetch_assoc($formQ2)){...}セッションが設定されていないかのように、ハードコーディングされた変数を使用するとうまく動作するためです。ありがとう。

EDIT - 私のコード全体。だから、初めて(セッションが空で最初に設定されている)初めて実行するとうまく動作します。したがって、1回のセッションでセッションを保持します。ページをリフレッシュすると(同じページは変更されません)、ページをリフレッシュするとセッションのvarが解除されているようなエラーが表示されます。私の全体のコード:

if (empty($_SESSION['test'])) { 
    $formQuery = "SELECT * FROM 'testTable'"; 
    $_SESSION['test'] = mysqli_query($dbconnection, $formQuery); 
    echo "new sess"; 
    } else { 
     $_SESSION['test'] = $_SESSION['test']; 
     echo "old sess"; 
    } 

while ($rows = mysqli_fetch_assoc($_SESSION['test'])){...} 

私は、それが正常に動作しますが、それはelseステートメント(ページの更新)をトリガしたときに、それもそれかかわらず、空のセッション変数を返し初めてif文を実行しますwehn、述べたように前に設定され、うまくいった。イムは、リフレッシュになってエラーがある:

Warning: mysqli_fetch_assoc(): Couldn't fetch mysqli_result in xxx on line 
362 

それは、最初のロードでは、セッションを設定し、うまく動作することを私には奇妙です。しかし、私が単にリフレッシュボタンを押すと、スローしてエラーになります。ご協力いただきありがとうございます。

+0

'のvar_dump($ formQ2)'、それはどのようなデータを持っているかどうかをチェックします。 –

+0

はいive done that。上記のように空です。ありがとう。 – user982853

+0

あなたの変数にデータがない場合、どのようにセッションにそれがありますか? –

答えて

1

セッション変数

ないで結果オブジェクト(ない実際の結果)を保存する方法があれば、私は疑問に思っては、ありません。値をテキスト形式で保存できるようにするためには、PHPはそれらを「シリアライズ」する必要があります。セッションのコンテキストでは、serialize関数の場合と同じように起こります。検索:

シリアライズする値。 serialize()は、resource型を除くすべての型を処理します。

そして、mysql_queryの戻り値は、mysql result型のリソースになります。

しかし、mysqli_fetch_assocの結果はセッションに格納することができます。なぜなら、これは単なる配列なので、完全にうまくシリアル化できるからです。しかし、mysqli_fetch_assocは結果セットの中から1行だけを取り出します。実際にデータベースにクエリを実行したときにセッションにすべての値を格納するためにループを使用するか、代わりにmysqli_fetch_allすべてを使用します。

+0

ご協力いただきありがとうございます。 – user982853

0

以下のコードを確認してください。私はあなたのために私のために働いている例があります。何かをする前にセッションを開始していることを確認してください。

<?php 
    session_start(); 

    $dbconnection = mysqli_connect("localhost","root","root","myDB"); 

    $formQuery3 = "SELECT * FROM myTable"; 
    $formQ2 = mysqli_query($dbconnection,$formQuery3); 

    $_SESSION['test'] = $formQ2; 

    while ($rows = mysqli_fetch_row($_SESSION['test'])){ 
     print_r($rows); 
    } 
?> 
+0

上記の私の編集をご覧ください。私はコード全体といくつかの詳細を貼り付けた。手伝ってくれてどうもありがとう。 – user982853

0

は、ここで私が使用しているものです:

$_SESSION['valueToSearch'] = $_GET['valueToSearch'];