2010-08-28 67 views
3

這是我第一次在這裏,我一直把我的頭髮拉出來,所以我認爲這對我來說是一個很好的第一個問題。插入到PHP中的序列化數組中

我將一些數組數據保存到mysql數據庫,然後我使用反序列化來編輯它。問題是,當我編輯一個索引時,它將數組中的每個其他索引都刪除。下面是一些示例代碼:

foreach($post as $key => $value) { 
    if (isset($row)) { 
     if ($i > 2) { $tempArray = unserialize($row[$i]); } 
    } 

    $tempArray[$time] = $value; 

    if ($key == 'pid' || $key == 'uid') { $data[$key] = $value; } 
    else { $data[$key] = serialize($tempArray); } 
    $i += 1; 
    unset($tempArray); 
    } 

感謝你可以給任何見解。

+4

對於初學者,您不應該將序列化數組插入到數據庫中。現在,代碼的其餘部分在哪裏? $ tempArray是什麼樣子的,你如何保存這些數據? – NullUserException 2010-08-28 00:43:37

+0

如何才能將數組數據插入我的數據庫呢? $ tempArray是一個臨時數組,在我使用反序列化之後,僅用於編輯保存的數組。 – Axus 2010-08-28 00:50:03

+6

你不知道。創建另一個表並使用外鍵將它們鏈接在一起。你總是可以使用JOIN獲得你想要的。 – NullUserException 2010-08-28 00:55:05

回答

2

將序列化的數組數據存儲在mysql中,並檢索並將其保存回同一個表中,這裏是您如何做到的。

從表中取出序列化的數據並將其反序列化並將數組數據存儲在變量中。通過使用我們存儲數據的變量來更改數組數據。

我們再次序列化具有修改數組的變量,並用新的序列化數據更新mysql表字段。

例如:

$data = array(
    "uid" => "some value", 
    "pid" => "some value" 
); 

$store_in_database = serialize($data); 
/* ...do the mysql insert query to store the new data in the field (serializedfield)... */ 

現在來更新存儲在數據庫表中的字段的序列化的數據。

/* ...取表的行或記錄任何你喜歡的方式(單條記錄或多個)*/

foreach($db_result as $db_row){ 

$temp_array = $db_row['serializedfield']; 
$temp_array['uid'] = "a new value"; 
$temp_array['pid'] = "another new value"; 

/* ... i wanted to add another array value */ 
$temp_array['akey'] = "some value"; 
$store_database = serialize($temp_array); 
/* ... do the mysql update query to replace this new data with the old one. */ 
unset($temp_array); 

} 

以上只是給你一個想法。我希望你已經理解在這裏應該如何做。

+0

-1贊同一個可怕的想法。 – NullUserException 2011-08-27 06:15:24

+0

將序列化數據存儲在RDBMS表中幾乎從未如此。它隱藏了RDBMS本身的數據,因此不能使用任何SQL的強大功能來搜索或以任何方式操縱該數據。 如果要與數據庫內數組中的項目建立「有許多」關係,請將它們放入其自己的表中,並將外鍵返回到包含項目。 – 2012-03-29 00:48:25

+1

那又如何?他只是問如何去做,而不是寫一本關於良好的代碼實踐的書。也許根本沒有必要以關係的方式處理這些數據。 – 2013-01-30 21:43:31