2012-01-17 2 views
0

ここで私のコードには何がありますか?私のコードで何が間違っているのかは分かりませんが、なぜデータベースに保存されないのか分かりません。 シリアル化されたデータをMySQLに保存することはできません

マイアレイ詳細

Array 
(
    [dates] => Array 
     (
      [0] => 2012-01-18 
      [1] => 2012-02-18 
      [2] => 2012-03-18 
      [3] => 2012-04-18 
      [4] => 2012-05-18 
     ) 

    [amount] => Array 
     (
      [0] => 2000 
      [1] => 2000 
      [2] => 2000 
      [3] => 2000 
      [4] => 2000 
     ) 

    [deposit] => Array 
     (
      [0] => 0 
      [1] => 0 
      [2] => 0 
      [3] => 0 
      [4] => 0 
     ) 

) 

マイ省コード

$sql = "INSERT INTO transaction (id, details) 
     VALUES('$id', $serializeddetails)"; 

$query = mysql_query($sql) or die("Fatal error: ".mysql_error()); 

と私は、このエラー

Fatal error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a:3:{s:5:"dates";a:6:{i:0;s:10:"2012-01-18";i:1;s:10:"2012-02-18";i:2;s:10:"2012' at line 2 

私はデータの私のタイプのためにLONGTEXTを使用してLONGBLOBを試みるが、ノー希望を持って、

私もbase64_ecode()も試してみてください。

$serializeddetails = base64_encode(serialize($detailsarray)); 

と、このエラーこれは文句を言わない、データベースに保存し、なぜ私のコードで間違っ私に何かが何をしたか

Fatal error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 2 

を得ましたか。

はあなたに

+0

値をエスケープするのを忘れていませんか?また、最初の例では実際には何もシリアル化されていません... FWIWでは、このデータは 'json_encode()'の代わりにコンパクトで言語に依存しない方法で格納される可能性があります。 –

+1

シリアライズされたデータをデータベースに保存しないでください。[データベース正規化に関する記事(http://en.wikipedia.org/wiki/Database_normalization)]を確認してください。 1つのフィールドにデータを保存するための迅速な解決方法はわかっていますが、「特定の日付にトランザクションを表示する」や「月にユーザーが行ったトランザクションの数」といった手間のかかるものを読みたい場合、 。 – Progman

+0

@Progman:一般的には正しいですが、決してそれを行うべきではないということは厳密には言えません - シリアル化されたデータを格納する理由はさまざまです。 –

答えて

2
$sql = "INSERT INTO transaction (id, details) 
     VALUES('$id', '$serializeddetails')"; 

$ serializeddetailsに感謝文字列で、SOU引用符を必要としています。また、シリアライズされたデータがエスケープされていることを確認してください。 mysql_real_escape_string()またはaddslashes()が気になります。これはテストデータでは必要ではありません(シリアライゼーション後に一重引用符は含まれません)が、他のデータと一緒に使用できます。

+0

これは、私はqoutesを使用して動作し、あなたの提案に感謝私はbase64_encodeからunserilzedする方法を見て回りますもう一度ありがとう:) – idontknowhow

関連する問題