php在Mysql中序列化数据

标签 php mysql arrays serialization

我使用“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(),则会正确返回数组。它应该是安全的,但会产生意想不到的结果。

在数据库中存储序列化数组时要格外小心。序列化返回一个字符串,因此您存储数据的字段通常是 ​​VARCHARTEXT。如果您只是用新数组覆盖存储的数组,旧数据将完全丢失。要更新数据库,请确保先将数据从数据库读取到数组中,然后更新它,然后才将其写回数据库。

虽然没有被禁止,但在数据库中使用和存储序列化的东西通常会产生很多问题。数据库有很多默认已知的数据类型,大的序列化数组会产生开销并使执行复杂化,如果以后需要修改系统,这简直是一件令人头疼的事情。并且您不能在序列化字段上使用关系查询。

关于php在Mysql中序列化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10836450/

相关文章:

php - MySQL + PHP : HTML Style

javascript - 自定义用户 HTML 输入安全

c++ - 当使用 'new int[n]' 声明一个新数组时,为什么它没有出现在本地列表中?

javascript - 使用 Knockout.js 中的新项目更新可观察数组的位置

php - 定时任务不工作

php - Yii2:如何在 Yii2 中使用 mysql LEFT() 函数和时间戳

php - MySQL:过滤不同行中的多个值,但仅返回与两个值匹配的行

Java - 返回 2 个值(字符串数组)

mysql - 需要从多个表中选择

python - 如何有效地将动态列表存储到 MySQL 列中?