我想在将总订单发送到Paypal之前保存额外信息。对于每个项目,我在我的MySQL数据库中创建了一个我要存储它的列。现在我想将它保存为一个数组,稍后我可以阅读它来创建一个PHP页面。额外字段取自输入表单字段。
通过使用数组我可以确定不要混淆信息吗?
答案 0 :(得分:31)
您可以使用serialize
/ unserialize
存储数组。使用该解决方案,它们无法轻松地从其他编程语言中使用,因此您可以考虑使用json_encode
/ json_decode
代替(这为您提供了广泛支持的格式)。 避免使用implode
/ explode
,因为您可能最终会遇到错误或安全漏洞。
请注意,这会使您的表非规范化,这可能是一个坏主意,因为您无法轻松查询数据。因此在继续之前要仔细考虑。您是否需要查询数据以获取统计数据或其他信息?还有其他理由来规范化数据吗?
另外,不要保存原始$_POST
数组。有人可以轻松制作自己的网络表单并将数据发布到您的网站,从而发送一个占用大量空间的非常大的表单。保存您想要的那些字段,并确保在保存之前验证数据(这样您就不会得到无效的值)。
答案 1 :(得分:11)
这样做的方法是使用序列化数组,这意味着“从中创建一个字符串”。为了更好地理解这一点,请看一下:
$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
答案 2 :(得分:6)
要使用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 );
答案 3 :(得分:5)
使用PHP函数serialize()
将数组转换为字符串。这些字符串可以很容易地存储在MySQL数据库中。如果需要,可以使用unserialize()
将它们再次转换为数组。
答案 4 :(得分:0)
<?php
$myArray = new array('1', '2');
$seralizedArray = serialize($myArray);
?>
答案 5 :(得分:0)
将其存储在RDBMs表中的带有逗号分隔符的多值列中。
答案 6 :(得分: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"]);