我正在建立一个网站,该网站存储特定于每个用户的大型(序列化)数组阵列。大型数组被序列化,然后数据库更新为其新值。此外,新数组被添加到$ _SESSION []数组中,该数组用于用户登录的时间段。我可以在大型数组中使用最多4个这些数组更新数组,但之后数据不会似乎正确更新。
即使在添加第3个数组并且$ _SESSION []数组似乎包含所有正确的数据之后,MySQL UPDATE查询也返回1但是当用户注销然后再次返回时,该数组似乎不是无论何时用户登录,都应该复制到$ _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());
'reports'和'email'数组元素并不真正相关。
用于从数据库中检索数组的代码如下:
$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']);
}
另外,抱歉,我在上述问题中使用了“阵列”一词约25次:)
答案 0 :(得分:0)
您的字段类型为text
,其最大长度为65535个字符。切换到longtext
,理论上限为4GB。但请注意docs说:
LONGTEXT列的有效最大长度还取决于客户端/服务器协议中配置的最大数据包大小和可用内存。
另请参阅max_allowed_packet设置的文档:
max_allowed_packet的协议限制为1GB。