【问题标题】:How to update column from serialize to json with PDO?如何使用 PDO 将列从序列化更新为 json?
【发布时间】:2018-04-26 14:12:01
【问题描述】:

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时,我想通过unserialize()json_encode()hobby列更新为json格式,然后我可以得到:

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

如何使用PDO来做到这一点?

【问题讨论】:

  • 对于每一行,将数据加载到PHP中,unserialize它,json_encode它,保存回来?
  • 应该很简单。 PDO 有good online documentation。如果您还有其他具体问题,请告诉我们。

标签: php mysql


【解决方案1】:

粗略的方法:

$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,
    ]);
}

假设您的桌子一切正常,那应该可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2022-01-18
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多