无法获取太大的MySQL数据

时间:2012-02-25 23:03:43

标签: php mysql database arrays

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

1 个答案:

答案 0 :(得分:0)

您的字段类型为text,其最大长度为65535个字符。切换到longtext,理论上限为4GB。但请注意docs说:

  

LONGTEXT列的有效最大长度还取决于客户端/服务器协议中配置的最大数据包大小和可用内存。

另请参阅max_allowed_packet设置的文档:

  

max_allowed_pa​​cket的协议限制为1GB。