需要从数据库字段中反序列化数据,以替换其纯文本

时间:2011-03-08 04:31:48

标签: php mysql serialization

出于某种原因,我将输入字段作为序列化数据存储到表字段中,现在需要将所有数据从序列化数据转换为纯文本。

我有大约2000个记录,我需要反序列化,然后用纯文本版本更新它。

我尝试了一些不同的事情,但我仍然没有成功。

有关如何完成更新序列化值的建议,并将其值反序列化到表中各自的行中。

2 个答案:

答案 0 :(得分:2)

首先备份数据库,然后这样的事情应该有效:

$query = mysql_query("SELECT `id`, `value` FROM `table`");

while($row = mysql_fetch_assoc($query))
{
    $id = $row['id'];
    $newdata = unserialize($row['value']);

    mysql_query("UPDATE `table` SET `value` = '{$newdata}' WHERE `id` = '{$id}' LIMIT 1");

    if(mysql_affected_rows() <= 0)
    {
        print_r("Update failed on ID {$id}! \n");
    }
}

当然,你必须根据你的需要修改它(表结构,序列化方法等)。

答案 1 :(得分:1)

<?php foreach($volunteers as $r): ?>
  <?php
  print "UPDATE data SET monday = trim('";
  if(unserialize($r->monday) && unserialize($r->monday) != "b:0;" && unserialize($r->monday) != "PM" && unserialize($r->monday) != "AM") {
    foreach(unserialize($r->monday) as $slot):
      print $slot.' ';
    endforeach;
  }
  print "') WHERE id = ".$r->id.";<br />"; ?>
<?php endforeach; ?>

刚刚复制输出并在Sequel Pro(ss http://cl.ly/56AG

中运行