在mysql数据库中保存数组

use*_*454 19 php mysql arrays

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

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

Emi*_*röm 36

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

请注意,这会使您的表非规范化,这可能是一个坏主意,因为您无法轻松查询数据.因此在继续之前要仔细考虑.您是否需要查询数据以获取统计数据或其他信息?还有其他理由来规范化数据吗?

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


Sli*_*liq 13

这样做的方法是序列化数组,这意味着"从中创建一个字符串".为了更好地理解这一点,请看一下:

$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
Run Code Online (Sandbox Code Playgroud)


Ama*_*ari 8

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

$array = array( 1, 2, 3 );
$string = serialize( $array );
echo $string;
Run Code Online (Sandbox Code Playgroud)

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

a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}
Run Code Online (Sandbox Code Playgroud)

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

// $array will contain ( 1, 2, 3 )
$array = unserialize( $string );
Run Code Online (Sandbox Code Playgroud)


Pau*_*aul 6

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

  • 在保存$ store = serizalize($ someData)之前; $ sql ="插入PaypalLogs(`store`,`created`)值('{$ store}',NOW())"; 在$ someData = unserizalize之后($ row ['store']); (2认同)