我正在建立一个网站,它存储了每个用户特有的大型(序列化)数组阵列。大数组被序列化,然后数据库被更新为它的新值。此外,新的数组被添加到$ _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