我试图抓住一个通过POST提供的日期,然后从提供的开始日期生成一个12周的日期列表。这些日期将进入数据库并输出一个12周的时间表,用户可以与之交互(添加/编辑/删除)。serialize()和unserialize()的问题 - 插入和选择数据PHP MySQL
我成功地服用的开始日期,产生12周日期列表和序列化形式加入到这个数据库,但是当谈到选择的日期显示,我收到以下错误:
Notice: unserialize() [function.unserialize]: Error at offset 0 of xxx bytes in ...
这里是我的代码:
1 .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,所以应该是正确的?我也认为日期内可能会有某些字符导致问题,但是当用“常规”数组(即文本)进行测试时,我会得到相同的错误。
任何建议/提示非常感谢,谢谢。
你为什么叫'stripslashes'?你是否在运行魔术引号?你的代码似乎也容易受到[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)的影响。 – Charles 2010-08-13 17:56:22
哎呀是的,不应该在那里 - 编辑,谢谢 – Dave 2010-08-13 17:57:51
你有没有检查数据库中的实际内容?从数据库中读取数据后,是否检查过$ row [“Programme_Dates”]的值?它们是否与您认为放入数据库的内容相符? – Craig 2010-08-13 18:05:19