【问题标题】:How to update serialize data in MySQL如何更新 MySQL 中的序列化数据
【发布时间】:2011-08-02 12:39:40
【问题描述】:

我的 mySQL 数据库中有这个序列化数据

a:4:{i:0;s:7:"bvl.png";i:1;s:8:"ccop.jpg";i:2;s:11:"reyborn.png";i:3;s:13:"swopgroup.jpg";}

如何更新这些数据,例如我想删除ccop.jpg

【问题讨论】:

    标签: php mysql serialization


    【解决方案1】:

    不要在数据库中存储序列化数据。

    创建一个包含main_idpicture 的链接表,并将您的图像名称存储在其中。
    因此,您将拥有对它们的不同访问权限。

    【讨论】:

    • 为什么我不将序列化数据保存到mysql数据库?
    • 除非您的数据库是 wordpress 数据库,否则您将永远处于受伤的世界中。
    • 除非您的数据库是 wordpress 数据库,否则您将永远处于受伤的世界中。
    【解决方案2】:

    您必须从数据库中获取值,对其进行反序列化,删除元素,对其进行序列化并再次保存。

    $remove = "ccop.jpg";
    
    //
    // get the string from the database
    //
    
    $arr = unserialize($str);
    
    foreach($arr as $key => $value)
      if ($value == $remove) unset($arr[$key]);
    
    $str = serialize($arr);
    
    //
    // save the string back to the database
    //
    

    与其保存序列化的值列表,不如使用normalized database 并执行简单的DELETE FROM images WHERE object_id = ...

    【讨论】:

    • 谢谢你的想法,如果我只能决定我可能会这样做,但不幸的是我只是在做 php 代码我无法更改数据库表定义,这就是为什么我正在寻找替代方式。
    【解决方案3】:

    理想情况下你需要

    • 解压
    • 反序列化
    • 修改它
    • 序列化
    • 将其写回数据库。

    【讨论】:

      【解决方案4】:

      由于您将其存储在 VARCHAR 字段中,并且它是 PHP 序列化数组,您可能希望将其从数据库中提取出来,反序列化,然后重新更新该字段。您不应该指望 MySQL 来修改 PHP 的特定信息,因为……这不是它的用途。

      【讨论】:

      • 谢谢你,你拯救了我的一天 :)
      猜你喜欢
      • 2011-03-17
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      相关资源
      最近更新 更多