最佳实践:关系数据存储和 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中文网其他相关文章!