- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图获取通过 POST 提供的日期,然后生成从提供的开始日期起 12 周内的日期列表。然后,这些日期将进入数据库,并输出 12 周的计划,用户可以与之交互(添加/编辑/删除)。
我成功获取开始日期,生成 12 周日期列表并将其以序列化形式添加到数据库中,但是在选择要显示的日期时,出现以下错误:
Notice: unserialize() [function.unserialize]: Error at offset 0 of xxx bytes in ...
这是我的代码:
此处的第一个 .php 文件采用表单输入(日期),然后获取从开始日期起 12 周内的每个日期的列表,并插入到数据库中:
数组:
$start = strtotime($_POST['Start_Date']);
$dates=array();
for($i = 0; $i<=84; $i++)
{
array_push($dates,date('Y-m-d', strtotime("+$i day", $start)));
}
$savetodb = serialize($dates);
插入:
$sql = "INSERT INTO programme VALUES (NULL, '20', '".$_POST["Start_Date"]."' , ' ".$savetodb." ', '".$_POST["Programme_Notes"]."')";
此处是第二个 .php 文件 - 选择并反序列化:
$result = mysql_query("SELECT Programme_Dates FROM programme");
while($row = mysql_fetch_array($result))
{
$dates = unserialize($row["Programme_Dates"]);
echo $dates;
}
从我读到的内容来看,问题可能与插入序列化数组的数据库列有关(即太小),但它设置为 TEXT 所以应该没问题吧?我还认为日期中的某些字符可能会导致问题,但是当使用“常规”数组(即只是文本)进行测试时,我得到了相同的错误。
非常感谢任何建议/提示,谢谢。
最佳答案
为什么要使用斜杠?我敢打赌这就是问题所在。从那里删除它,看看它是否有效。
作为旁注,应该避免使用条斜杠,就像数据可能插入数据库一样,应该正确转义它们,这意味着不应添加额外的斜杠。如果您需要从数据本身中删除斜杠,我建议使用类似 array_filter 的东西。 在反序列化数组之后。
编辑
您还应该研究 SQL 注入(inject)以及如何防止它,因为您的代码很容易被利用。
更新
进一步查看代码,您插入带有 2 个额外空格的序列化数组:' ".$savetodb."',
尝试仅使用 '".$savetodb."',
并查看它是否可以解决您的问题。
关于php - Serialize() 和 unserialize() 的问题 - 插入和选择数据 PHP MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3479473/
这个问题在这里已经有了答案: How to repair a serialized string which has been corrupted by an incorrect byte count
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
有什么方法可以限制 PHP 的 unserialize() 只解析数组吗?出于安全原因。假设在我不想调用的反序列化对象中有一个邪恶的 __unserialize() 魔术方法! 最佳答案 Is the
我的数据库中有一个“招聘人员”表,它具有不同的属性,其中之一是“专业”。 "Professions" 是一个序列化数组,我从多选表单中获得它。这很好用。 当我反序列化这个属性时,没有打印任何东西——没
我使用函数 serialize() 插入数据库值(数组) , 如何用 unserialize() 回显它们在标签 ... ? 我在数据库中有这个:a:6:{i:0;s:15:"Coffee";i:1;
php中有格式化字符串并转换成数组或对象的好方法,即序列化处理。 有两种序列化变量的方法。 以下示例,使用 serialize() 和 unserialize() 函数:
我选择了具有多个属性的标签,我使用 PHP serialize 函数作为序列化数组将多个值保存在数据库中: 我插入的数据库数组: a:9:{i:0;s:8:"Arkansas";i:1;s:10:"C
我们刚刚将网站切换到新服务器。我的 PHP 软件有一部分从 MySQL 表中提取一个序列化的数据值,并将其放入一个变量中,然后它应该是 unserialize()。 我从来没有在任何其他服务器上遇到过
我有一个分类广告网站,用户可以在其中买卖任何东西... 我的问题是公司需要花费大量金钱、时间等,所有分类广告在发布到网站之前必须由自然人(员工)审核。 因此,当您创建新的分类实体时,您会收到类似“您的
这里,当我点击提交按钮进行连接时出现此错误。 注意:unserialize():在/var/www/Blog/Symfony/vendor/doctrine/dbal/lib/Doctrine/DBA
如何从该数组中获取 $userid 和 $username 的所有值 a:1:{s:2:"cc";a:2:{i:4;s:4:"koko";i:8;s:4:"soso";}} 我的代码只打印最后一个字符
我尝试使用内存缓存在 PHP 中缓存我的用户对象,但在使用 PDO 时出现错误。我添加了一个 __sleep 和一个 __wakeup 函数。 用户.php /** * @var PDO */ p
我有一个保存到文件的序列化值数组,需要更改其中一个变量的值。在示例中,我更改了 $two 的值,然后使用新值将整个数组保存回文件中。 是否有一种更有效的方法可以仅更改单个值而无需读取和写入整个文件/数
我的问题很基础。 关于 serialize() 和 unserialize() 在 php 中的确切含义,我没有找到任何示例来满足我的需求?他们只是举了一个例子——序列化一个数组并以无法解释的格式显示
我的 Drupal 站点页面上方出现此错误: Notice: unserialize() [function.unserialize]: Error at offset 0 of 32 bytes i
我正在测试来自 build internet 的代码,这是一个 OOP 教程。我收到一条错误消息: unserialize() expects parameter 1 to be string, ob
我正在处理来自 MySQL 数据库的一些序列化数据,我需要使用 Ruby 对其进行反序列化(序列化数据用于为数据库查询构建 WHERE 子句)。 PHP 有 unserialize() 方法可以将它转
我正在与本地计算机上的工作人员一起使用SOCK集群运行并行操作。如果我限制要迭代的集合(在一个测试中使用70个任务而不是完整的135个任务),那么一切都很好。如果我购买全套产品,则会收到错误消息“un
我正在使用 symfony 2,我有一个包含数组的实体,在 MySQL 数据库中,数组列生成为 longtext utf8_unicode_ci 列,并带有注释 DC2Type:array. 在查询数
我试图获取通过 POST 提供的日期,然后生成从提供的开始日期起 12 周内的日期列表。然后,这些日期将进入数据库,并输出 12 周的计划,用户可以与之交互(添加/编辑/删除)。 我成功获取开始日期,
我是一名优秀的程序员,十分优秀!