30

我想在将总订单发送到 Paypal 之前保存额外信息。对于每个项目,我在我的 MySQL 数据库中创建了一个我想要存储它的列。现在我正在考虑将其保存为一个数组,以便稍后读取以创建 PHP 页面。额外字段取自输入表单字段。

通过使用数组,我可以确保不会混淆信息吗?

4

7 回答 7

52

serialize您可以使用/存储数组unserialize。使用该解决方案,它们不能轻易地从其他编程语言中使用,因此您可以考虑使用json_encode/json_decode代替(这为您提供了广泛支持的格式)。避免为此使用implode/ explode,因为您最终可能会遇到错误或安全漏洞。

请注意,这会使您的表非规范化,这可能是个坏主意,因为您无法轻松查询数据。因此,在继续之前仔细考虑这一点。您可能需要查询数据以进行统计或其他方式吗?是否有其他原因来规范化数据?

另外,不要保存原始$_POST数组。有人可以轻松地制作自己的 Web 表单并将数据发布到您的网站,从而发送一个占用大量空间的非常大的表单。保存您想要的那些字段,并确保在保存之前验证数据(这样您就不会得到无效值)。

于 2012-05-21T13:45:24.047 回答
18

完成类似事情的方式是序列化数组,这意味着“用它制作一个字符串”。为了更好地理解这一点,请看一下:

$array = array("my", "litte", "array", 2);

$serialized_array = serialize($array); 
$unserialized_array = unserialize($serialized_array); 

var_dump($serialized_array); // gives back a string, perfectly for db saving!
var_dump($unserialized_array); // gives back the array again
于 2013-07-24T09:28:38.920 回答
12

使用 PHP 函数serialize()将数组转换为字符串。这些字符串可以很容易地存储在 MySQL 数据库中。unserialize()如果需要,可以使用它们再次转换为数组。

于 2012-05-21T13:40:24.703 回答
12

要使用 PHP 将任何数组(或任何对象)转换为字符串,请调用 serialize():

$array = array( 1, 2, 3 );
$string = serialize( $array );
echo $string;

$string 现在将保存数组的字符串版本。上述代码的输出如下:

a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}

要将字符串转换回数组,请使用 unserialize():

// $array will contain ( 1, 2, 3 )
$array = unserialize( $string );
于 2015-09-19T05:21:11.877 回答
4
<?php
$myArray = new array('1', '2');
$seralizedArray = serialize($myArray);
?>
于 2014-11-13T11:10:08.387 回答
2

将其存储在 RDBMs 表中使用逗号分隔符的多值列中。

于 2018-11-28T17:02:01.970 回答
0

您可以使用 MySQL JSON 数据类型来存储数组

mysql> CREATE TABLE t1 (jdoc JSON);

查询正常,0 行受影响(0.20 秒)

mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');

查询正常,1 行受影响(0.01 秒)

在 PHP 中获取上述对象

json_encode(["key1"=> "value1", "key2"=> "value2"]);

更多在https://dev.mysql.com/doc/refman/8.0/en/json.html

于 2021-02-26T06:52:25.457 回答