我使用“serialize($array);
”将数据保存在我的数据库 (mysql) 中。此数据来自带有输入字段的表单。我想知道如果我在表单字段中插入类似 "a:4:{i:1;s:7:"fdsfdsf";i
"的内容会发生什么。可以破坏我存储在数据库中的数据吗?
谢谢!!
最佳答案
我在我的系统上测试了你的例子,在序列化之后,返回了以下值:
string(42) "a:1:{i:0;s:24:"a:4:{i:1;s:7:"fdsfdsf";i";}"
这是将要添加到数据库中的内容。但是,强烈建议不要将用户输入直接存储在数据库中。您应该首先使用 mysql_real_escape_string()
格式化普通用户输入,因为它会转义关键字符。
除此之外,如果对从数据库读回的序列化文本调用 unserialize()
,则会正确返回数组。它应该是安全的,但会产生意想不到的结果。
在数据库中存储序列化数组时要格外小心。序列化返回一个字符串,因此您存储数据的字段通常是 VARCHAR
或 TEXT
。如果您只是用新数组覆盖存储的数组,旧数据将完全丢失。要更新数据库,请确保先将数据从数据库读取到数组中,然后更新它,然后才将其写回数据库。
虽然没有被禁止,但在数据库中使用和存储序列化的东西通常会产生很多问题。数据库有很多默认已知的数据类型,大的序列化数组会产生开销并使执行复杂化,如果以后需要修改系统,这简直是一件令人头疼的事情。并且您不能在序列化字段上使用关系查询。
关于php在Mysql中序列化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10836450/