2012-03-20 13 views
0

私は自分のセッションをMySQLデータベースに保存します。セッションデータは直列化され、DBセルに格納されます。データベースにシリアル化されたオブジェクトストアが部分的に

問題は次のとおりです。シリアル化されたオブジェクトが一部だけデータベースに取り込まれます。 クエリ文字列をエコーし​​てコピーし、phpMyAdmin->データベースクエリに貼り付けて、データベースに完全に取得する必要があります。 "echo mysql_error"はエラーを表示しません。 エンコーディングが理由ではなく、厳密に宣言しています。 ここに私が使用しているコードがあります。

$sql = "UPDATE sessions 
SET SESSION_ID='$id', ACCESS='$access', DATA='".stripslashes($data)."', USER_ID='$username' WHERE SESSION_ID = '$id'"; 
echo("<br>".$sql."<br>"); 
return mysql_query($sql, $_sess_db); 
echo mysql_error($_sess_db); 

どのように修正できますか? phpmyadminにコピー&ペーストすると同じクエリがうまく動作するのですが、mysql_query関数を使って実行するとうまくいかないのはなぜですか?

+0

で呼び出されていないされることを前提としています。すべてのデータがシリアル化されていますか?そして、正常にシリアル化されていませんか?私は問題がMySQLから来るとは思わない。セッションをプレーンなファイルに保存しようとしましたか?あなたは同じ問題を抱えていますか? –

+0

1.エコーされた文字列を投稿できますか?これは恐らくこれを引き起こしているでしょう... 2.すべてのデータがシリアライズされたときに –

+0

の前に戻るため、Mysql_errorは使用されません。私はそれをunserializeしない、私はphpMyAdmin経由でデータベースを見て、オブジェクトが完全であるかどうかを確認します。同じオブジェクトを持つプレーンファイルのセッションは正常に動作します – user1010936

答えて

1

更新しないでください。動的に更新ステートメントを作成しないでください。代わりにというパラメータ設定クエリを使用してください(question and answers on sqlinjection参照)。私はそれが正確にエスケープされていないdatta(何がパラメータ化されたクエリを使用して防ぐことができます)と関係があると仮定します。また、私は、私はシリアル化されたデータに問題があると仮定しmysql_error()があるため、以前の

リターン声明

0
$sql= 'UPDATE `sessions` 
SET `SESSION_ID`= "'.$id.'", 
`ACCESS`= "'.$access.'", 
`DATA`= \''.str_replace("'", "\'", $data).'\', 
`USER_ID`= "'.$username.'" 
WHERE `SESSION_ID`= "'.$id.'"'; 
関連する問題