最佳實務:關聯式資料儲存與 PHP 陣列處理
通常不建議在單一 MySQL 欄位中儲存陣列。相反,建議分析您的資料模型並相應地重組它。但是,如果必須將陣列儲存在單一欄位中,請考慮以下選項:
序列化和反序列化:
使用serialize()和unserialize() PHP函數可以將陣列轉換為字串,然後將其儲存在MySQL 欄位中。但是,您將無法對陣列中的特定內容執行查詢。
JSON 編碼和解碼:
或者,您可以使用 json_encode()和 json_decode() 函數。這些函數提供了一種更現代、更結構化的方法來序列化和反序列化資料。
考慮以下陣列:
$a = array( 1 => array( 'a' => 1, 'b' => 2, 'c' => 3 ), 2 => array( 'a' => 1, 'b' => 2, 'c' => 3 ), );
為了實現最佳資料庫儲存和操作,您應該重構資料模型。為數組中的每個鍵值對建立一個包含單獨列的表,如:
DROP TABLE IF EXISTS test; CREATE TABLE test ( id INTEGER UNSIGNED NOT NULL, a INTEGER UNSIGNED NOT NULL, b INTEGER UNSIGNED NOT NULL, c INTEGER UNSIGNED NOT NULL, PRIMARY KEY (id) );
您可以使用PHP 函數與資料庫互動:
// Connect to the database $c = mysql_connect($server, $username, $password); mysql_select_db('test'); // Example functions to interact with the database function getTest() { $ret = array(); $query = 'SELECT * FROM test'; $r = mysql_query($query,$c); while ($o = mysql_fetch_array($r,MYSQL_ASSOC)) { $ret[array_shift($o)] = $o; } mysql_close($c); return $ret; } function putTest($t) { foreach ($t as $k => $v) { $query = "INSERT INTO test (id,". implode(',',array_keys($v)). ") VALUES ($k,". implode(',',$v). ")"; $r = mysql_query($query,$c); } mysql_close($c); } // Insert the array into the database putTest($a); // Retrieve the data from the database $b = getTest();
透過採用關聯式數據模型,可確保資料的高效儲存、查詢和操作。
以上是我應該如何在關聯式資料庫中儲存和管理 PHP 陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!