我有个问题。我有一个网站,人们和不同的交易,他们从一个虚假的网上银行。我希望能够在mysql数据库中存储每个人的事务数组。我希望将每个事务定义为一个具有时间戳的关联数组,并使用"bank“表示其事务的sql查询。
然后,在序列化之后,我希望这些值是保存所有事务的事务数组的值。然后,我想将其序列化并将其存储在数据库中,以便稍后可以通过取消序列化该事务并将另一个事务的序列化数组附加到该事务来添加该事务。到目前为止,下面的代码工作正常,只是它只覆盖了一个事务,而不是附加一个新的事务。我真的很感谢任何人的帮助。
提前感谢
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);
}发布于 2011-10-22 08:13:16
如果我是您,我会选择一个新的表,在这个表中,每个条目都表示一个事务,并且有一个外键student_id。
这将是非常、非常、非常清晰、灵活和可伸缩的(例如,如果您想要显示用户X的最后3个事务怎么办?如果一个用户有几百万个事务怎么办?)。
发布于 2011-10-22 08:19:46
首先,你不需要序列化每个数组,然后再序列化。 serialize是递归的:
$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
(
)
)
)所以只需在插入数据库之前进行序列化即可。
第二,你应该改变你的数据库结构,就像提到的,用的外键创建一个新的表。这样,每个条目都代表一个事务。
另外,为什么要存储实际的SQL查询?这对我来说没有任何意义。你为什么不真的做一笔假交易呢?
https://stackoverflow.com/questions/7856529
复制相似问题