出于某种原因,我将输入字段作为序列化数据存储到表字段中,现在需要将所有数据从序列化数据转换为纯文本。
我有大约2000个记录,我需要反序列化,然后用纯文本版本更新它。
我尝试了一些不同的事情,但我仍然没有成功。
有关如何完成更新序列化值的建议,并将其值反序列化到表中各自的行中。
答案 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)
中运行