我試圖抓住一個通過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