我使用“serialize($ array);”将数据保存在我的数据库(mysql)中。这些数据来自带有输入字段的表单。我想知道如果我在表单字段中插入“a:4:{i:1; s:7:”fdsfdsf“; i”)会发生什么情况。可以打破我存储在数据库中的数据? 谢谢!Php序列化Mysql中的数据
回答
我测试了我的系统上的例子做到这一点,序列化之后,将返回以下值:
string(42) "a:1:{i:0;s:24:"a:4:{i:1;s:7:"fdsfdsf";i";}"
这是将被添加到数据库中。但是,非常不鼓励将用户输入存储在数据库中。您应该首先使用mysql_real_escape_string()格式化纯用户输入,因为它会转义重要字符。
除此之外,如果在从数据库读回的序列化文本上调用unserialize(),则会正确返回该数组。它应该是安全的,但会产生意想不到的结果。
非常小心将序列化数组存储在数据库中。序列化返回一个字符串,所以你存储数据的字段通常是VARCHAR或TEXT。如果你只是用覆盖存储的数组,旧数据将会完全丢失。若要更新数据库,请确保您首先将数据从数据库读取到数组中,并更新它,然后才将其写回数据库。
虽然它不被禁止,但是在数据库中使用和存储被串行化的东西通常会产生很多问题。数据库有很多默认情况下已知的数据类型,而大型序列化数组会造成开销并使执行复杂化,如果稍后需要修改系统,那么这只是一个麻烦。并且您不能在序列化字段上使用关系查询。
在将数据插入数据库之前,阻止它的一种方法是转义引号。
您可以用mysqli_real_escape_string()
http://www.php.net/manual/en/mysqli.real-escape-string.php
谢谢johannes !! – alejoabella
旧的方式
当你还在使用mysql_
你可以写这样的疑问:
$sql = sprintf("INSERT INTO mytable (a) VALUES ('%s')",
mysql_real_escape_string(serialize($myvar))
);
mysql_query($sql) or die("oh no!");
推荐的方法
为PDO
和mysqli
你得到的可以选择使用准备好的语句,强烈推荐这些语句用于防止SQ L注入攻击矢量。在PDO的一个例子:
$stmt = $db->prepare('INSERT INTO mytable (a) VALUES (:myvar)');
$stmt->execute(array(
':myvar' => serialize($myvar),
));
字段长度
此外,请确保您的序列化的数据不超过表中的字段的列大小的长度;截断的序列化变量几乎没用。
@alejoabella不客气。回到这个答案,我意识到这并不是那么好,所以我修改了它:) –
呃......准备好的语句又如何防止注入?确切地说 - 他们不。完全一样。 – specializt
@specializt准备好的陈述在这方面并不神奇,人们仍然可以(并且确实)搞砸了,最近的[Drupal咨询](https://www.drupal.org/SA-CORE-2014- 005)。但是,如果您认为我的答案中的陈述可以被利用,请告诉我该如何实现。 –
- 1. PHP反序列化序列化数据
- 2. 如何在php中保存多个序列化数据mysql mysql
- 3. MySQL InnoDB数据序列化
- 4. 序列化mysql表中的数据
- 5. 在mysql中的序列化php中存储多语言数据
- 6. 如何反序列化R中的php序列化数据?
- 7. 从mysql表中反序列化数据并通过php输出?
- 8. 如何在php中序列化数据?
- 9. SitePress的MySQL数据库中的序列化数据的结构
- 10. 如何使用PHP更新MySQL数据库中的序列化数据?
- 11. PHP序列化的数据反序列化的jQuery
- 12. 使用php将序列化数据的最大价值转化为mysql列
- 13. PHP/Mysql:搜索字符串的序列化数据
- 14. 是PHP序列化对象数据清理的Mysql注入?
- 15. jQuery反序列化PHP序列化的数据
- 16. 在mysql数据库中搜索 - 未序列化的数据
- 17. MySQL更新序列化数据
- 18. 序列化/反序列化PHP数组
- 19. 反序列化数据并根据MySQL中的ID检查它
- 20. 序列化列表尝试序列化列表中的数据
- 21. 如何在PHP中反序列化Ruby序列化的YAML数据?
- 22. 在python反序列化PHP数据
- 23. 反序列化PHP会话数据
- 24. php序列化数据回到javascript
- 25. 操纵序列化ajax数据到php
- 26. PHP解释jQuery序列化数据
- 27. 追加序列化阵列中的数据用PHP
- 28. 将数据序列化序列化
- 29. 如何在没有PHP的情况下在MySQL中序列化数据
- 30. 搜索mysql的序列化数据中的特定字符
感谢您的回复和建议,一直非常有帮助! – alejoabella
由于php序列化数据返回二进制数据,请不要使用VARCHAR或TEXT,而应使用VARBINARY或BLOB。 –