我正在建立一個網站,它存儲了每個用戶特有的大型(序列化)數組陣列。大數組被序列化,然後數據庫被更新爲它的新值。此外,新的數組被添加到$ _SESSION []數組中,用於用戶登錄期間。我可以更新數組中最多4個這樣的數組,但之後數據不會似乎正確更新。無法獲得太大的MySQL數據
MySQL UPDATE查詢返回1,即使在添加了第3個數組後,$ _SESSION []數組似乎包含所有正確的數據,但當用戶註銷然後再次返回時,數組似乎不會被複制到$ _SESSION []數組,就像它應該在用戶登錄時一樣。如果這些數組中只有4個被存儲在大數組中,那麼可以從數據庫中獲取數據沒有問題。我將數據庫字段的長度增加到了所需的數量之外(然後將它增加到超出應有的要求)但它沒有幫助。
當我去phpMyAdmin,我可以看到數組更新成功,直到數組3之後,當序列化數組突然停止(在序列化數組中的一個句子的中間),但我認爲這可能是一個問題phpMyAdmin,因爲它旁邊的數組編輯框說'因爲它的長度,這個字段可能不可編輯',所以也許phpMyAdmin只是沒有打擾到加載到微小的textarea數組的其餘部分。
有什麼我可以解決這個問題嗎?有什麼我可能沒有意識到的(我是一個初學MySQL的人,但它似乎一直工作到現在爲止)。
用於更新數據庫的代碼是這樣的:
$_SESSION['data']['user']['templates'][$_SESSION['edit']['templateNo']] = $template;
$serializedTemplates = mysql_real_escape_string(serialize($_SESSION['data']['user']['templates']));
$serializedReports = mysql_real_escape_string(serialize($_SESSION['data']['user']['reports']));
$email = mysql_real_escape_string($_SESSION['data']['user']['details']['email']);
$returned = mysql_query("UPDATE rmusers SET templates='$serializedTemplates', reports='$serializedReports' WHERE email='$email'") or die (mysql_error());
「報告」和「電子郵件」數組元素是不是真的有關。
用於從數據庫中檢索數組中的代碼是這樣的:
$result = mysql_query("SELECT * FROM rmusers WHERE email='" . $_POST['email'] ."'");
$userRow = mysql_fetch_array($result);
if (strlen(unserialize($userRow['templates'])) > 0)
{
$_SESSION['data']['user']['templates'] = unserialize($userRow['templates']);
}
此外,對不起,我已經使用這個詞「陣」在上面的問題:)
什麼類型的字段是數據庫中的模板?您還應該能夠通過查看phpMyAdmin中的數據(而不是編輯)來檢查數據,然後單擊該圖標以展開截斷的文本字段(如下所示: - > T < - ) – 2012-02-25 23:10:53
這個數據塊的大小是多少到mysql的「max_allowed_packet」設置? – 2012-02-25 23:13:54
字段類型是文本。我不知道「max_allowed_packet」設置 - 這可能是問題。我該如何改變它? – 2012-02-25 23:23:13