如何使用PDO将列从序列化更新到json?

时间:2018-04-26 14:12:01

标签: php mysql

2列namehobby,两者都是varchar(255)。hobbyserialize(array())的结果。

id   name    hobby
1    jack    a:2:{i:0;s:8:"swimming";i:1;s:8:"football";}
2    mary    a:2:{i:0;s:5:"music";i:1;s:2:"TV";}  

当我将数据库从mysql 5.3更新到mariadb 10.2时,我想通过hobbyunserialize()json_encode()列更新为json格式,然后我可以得到:

id   name    hobby
1    jack    ["swimming","football"]
2    mary    ["music","TV"]  

如何使用PDO进行操作?

1 个答案:

答案 0 :(得分:0)

粗暴的方式:

$stmt = $pdo->query('SELECT name, hobby FROM your_table;');

while ($row = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
    $id = $row['id'];

    $unserialized_name = unserialize($row['name']);
    $unserialized_hobby = unserialize($row['hobby']);

    $jsonified_name = json_encode($unserialized_name);
    $jsonified_hobby = json_encode($unserialized_hobby);

    // now the actual UPDATE:
    $stmt = $pdo->prepare('UPDATE your_table SET name = :name, hobby = :hobby WHERE id = :id');

    $stmt->execute([
        'name' => $jsonified_name,
        'hobby' => $jsonified_hobby,
        'id' => $id,
    ]);
}

Assuimg你的桌子上的一切都没问题,这应该可以解决问题。