【问题标题】:How to fix PHP Notice: unserialize(): Error at offset 1309 of 49151 bytes?如何修复 PHP 注意:unserialize(): 偏移量 1309 的 49151 字节出错?
【发布时间】:2017-09-14 15:23:36
【问题描述】:

我这样保存了我的数组:

$saveModel = base64_encode(serialize($classifier));

mysqli_query($db, "INSERT INTO model_latih(isi) VALUES('$saveModel')")or die("Error : ".mysqli_error($db)); 

然后我尝试使用以下代码从数据库中获取它:

$q = mysqli_query($db, "SELECT * FROM model_latih")or die("Error: ".mysqli_error($db));

$fetch = mysqli_fetch_assoc($q);
$row = $fetch['isi'];
$data = unserialize(base64_decode($row));

但它给出了这个错误:

PHP 通知:unserialize():49151 字节偏移量 1309 处出错

我比较了serializeunserializeresult 的长度。
这两个字符串是不同的。 serialize 的长度是 255164,unserialize 是 65535。似乎它没有完全加载。
有人知道是什么让它与众不同吗?

我希望有人可以帮助我解决这个问题。谢谢。

【问题讨论】:

  • 你试过不插入和从数据库获取吗?如果它工作,数据库插入的问题。可能有一个字符会破坏插入或结果。使用带有 ENT_QUOTES 参数的任何 json 编码。
  • 是的,当我没有插入并从数据库中获取时,它可以完美运行。你能给我一些参考吗?
  • 65535 应该响铃。您的数据库列可能太窄。 Mysql 在插入时截断你的字符串。
  • 好的,您的列类型是什么?我猜它的 varchar 长度小于要求的长度
  • 非常感谢兄弟,现在我可以继续我的工作了。祝你有美好的一天:D。再次感谢您:)

标签: php serialization


【解决方案1】:

我遇到了同样的问题。 我将数据库中列的类型从 BLOB 更改为 MEDIUMBLOB。

我发现:

BLOB can hold 65535 bytes (64 KB)
MEDIUMBLOB can hold 16777215 bytes (16 MB)
LONGBLOB can hold 4294967295 bytes (4 GB)

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多