2011-10-22 4 views
1

문제점이 있습니다. 나는 가짜 온라인 은행과 사람들이 거래하는 웹 사이트가 있습니다. 내 mysql 데이터베이스에 각 사람의 트랜잭션 배열을 저장할 수 있기를 원한다. 각 트랜잭션을 타임 스탬프가있는 연관 배열 및 "은행"과의 트랜잭션을 나타내는 SQL 쿼리로 정의해야합니다.PHP 배열, 직렬화 및 비 직렬화

그런 다음 일련 화 된 후 해당 트랜잭션을 모두 보유한 트랜잭션 배열의 값이되기를 바란다. 그런 다음이를 직렬화하여 데이터베이스에 저장하여 나중에 해당 트랜잭션을 unserialize하고 다른 트랜잭션의 serialize 된 배열을 추가하여 트랜잭션을 추가 할 수있게하려고합니다. 지금까지이 코드는 하나의 트랜잭션을 덮어 쓰고 새로운 트랜잭션을 추가하지 않는다는 점을 제외하면 작동합니다. 나는 정말 어떤 도움을 주셔서 감사합니다. 사전에

감사

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 ($ 행)', 당신이 실제로보고있는'$ 행 [ '거래']'문자열 값을 갖는? –

+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 
       (
       ) 

     ) 

) 

그래서 바로 데이터베이스에 삽입하기 전에 직렬화.

둘째, 데이터베이스 구조를 변경해야합니다. 언급 한 vzwick처럼, 학생의 외래 키가있는 새 테이블을 만듭니다. 그런 식으로 각 항목은 트랜잭션을 나타냅니다.

또한 실제 SQL 쿼리를 저장하는 이유는 무엇입니까? 그게 나에게 어떤 의미가 없지. 왜 실제로 가짜 거래를하지 않습니까?