2011-10-22 11 views
1

問題があります。私は人々とのウェブサイトと、偽のオンライン銀行とのやりとりの異なる取引をしています。私はmysqlデータベースに各人のトランザクションの配列を格納できるようにしたい。私は、各トランザクションをタイムスタンプと "銀行"とのトランザクションを表すSQLクエリを持つ連想配列として定義します。PHP配列、シリアライズ、およびシリアル化

次に、それらをシリアル化した後、トランザクションのすべてを保持するトランザクション配列の値にします。それから私はそれをシリアル化してデータベースに保存して、後でそれをシリアル化して別のトランザクションのシリアル化された配列を追加してトランザクションを追加することができます。これまでのところ、以下のコードは、1つのトランザクションを上書きし、新しいトランザクションを追加しないという点を除いて動作します。私は本当に助けに感謝します。事前に

おかげ

function modify_transactions($row, $sql) 
{ 
$sql=mysql_real_escape_string($sql); 
if(isset($row["TRANSACTIONS"])) 
{ 
    $transactions = unserialize($row["TRANSACTIONS"]); 
} 
else 
{ 
    $transactions = array(); 
} 
$transaction_array = array("timestamp"=>time(),"query"=>$sql); 
$transaction_data = serialize($transaction_array); 
$transactions[] = $transaction_data; 
$transactions_upload = serialize($transactions); 
$name = $row["NAME"]; 
$query = "UPDATE band.students SET TRANSACTIONS = '$transactions_upload' WHERE students.NAME = '$name'"; 
mysql_query($query); 
} 
+0

'var_dump($ row)'の場合、実際に '$ row ['TRANSACTIONS']'が文字列値を持っていますか? –

+0

はいトランザクションの中に最新のトランザクションのシリアル化された形式を表示します – JacKeown

+0

類似[MySQLの配列を格納しますか?](http://stackoverflow.com/questions/2031254/storing-arrays-in-mysql) – hakre

答えて

3

私があなただったら、私はむしろ、すべてのエントリがトランザクションを表すことになり、それが外部キーstudent_idを持っていた新しいテーブルのために行くと思います。

これははるかにクリーンでスケーラビリティに優れています(つまり、ユーザーXの最後の3つのトランザクションを表示する場合、ユーザーが数百万回のトランザクションを処理する場合はどうなりますか)。

+0

+ 1:データベース内にデータベースを作成しないでください。 – hakre

1

まず、各アレイをシリアル化してから、再度シリアル化する必要はありません。シリアル化は再帰的です:

$array = array(
    array(
     '1', 
     array() 
    ), 
    array(
     '2', 
     array() 
    ) 
); 

$serialized = serialize($array); 

$unserialized = unserialize($serialized); 

echo "<pre>"; 
print_r($unserialized); 
echo "</pre>"; 

プリント:

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => Array 
       (
       ) 

     ) 

    [1] => Array 
     (
      [0] => 2 
      [1] => Array 
       (
       ) 

     ) 

) 

だからちょうどデータベースに挿入する前にシリアライズ。

第2に、データベース構造を変更する必要があります。上記のvzwickと同様に、学生の外部キーを使用して新しいテーブルを作成します。こうして、各エントリはトランザクションを表します。

また、実際のSQLクエリを保存する理由は何ですか?それは私には意味をなさない。なぜあなたは実際に偽の取引をしないのですか?