我正在设置一个网站,其中存储了每个用户特定的大型(序列化)数组。对大型数组进行序列化,然后将数据库更新为新值。此外,新数组被添加到$_SESSION[]数组中,该数组用于用户登录的时间段。我可以在大型数组中使用多达4个这样的数组来很好地更新数组,但之后数据似乎无法正确更新。
即使在添加了第三个阵列之后,MySQL更新查询也会返回1,并且$_SESSION[]数组似乎包含所有正确的数据,但是当用户注销然后重新登录时,该数组似乎没有像用户每次登录时那样被复制到$_SESSION[]数组。如果这些数组中只有4个存储在大型数组中,则可以从数据库中提取数据。我增加了数据库字段的长度,超过了所需的长度(然后又增加到超过了应该需要的长度),但这并没有帮助。
当我转到phpMyAdmin时,我可以看到数组被成功更新,直到数组3之后,序列化的数组突然停止(在序列化的数组中的句子中间),但我认为这可能是phpMyAdmin的问题,因为在数组编辑框旁边显示“由于其长度,此字段可能不可编辑”,所以可能phpMyAdmin只是懒得将数组的其余部分加载到极小的文本区域中。
我能做些什么来解决这个问题吗?有没有什么我可能不知道的(我是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());‘report’和'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次'array‘这个词:)
发布于 2012-02-26 07:34:04
字段类型为text,最大长度为65535个字符。切换到longtext,理论上有4 4GB的限制。然而,请记住,docs说:
LONGTEXT列的有效最大长度还取决于客户端/服务器协议中配置的最大数据包大小和可用内存。
另请参阅max_allowed_packet设置的文档:
max_allowed_packet的协议限制为1 1GB。
https://stackoverflow.com/questions/9448902
复制相似问题