gpt4 book ai didi

php - Serialize() 和 unserialize() 的问题 - 插入和选择数据 PHP MySQL

转载 作者:行者123 更新时间:2023-11-29 09:18:00 24 4
gpt4 key购买 nike

我试图获取通过 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com