Как обновить столбец из сериализации в json с помощью PDO?

2 столбца name и hobby, оба varchar(255).hobby является результатом serialize(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, я хочу обновить столбец hobby до формата json с помощью unserialize() и json_encode(), тогда я могу получить:

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

Как использовать PDO для этого?


person kittygirl    schedule 26.04.2018    source источник
comment
Для каждой строки загрузить данные в PHP, unserialize, json_encode, сохранить обратно?   -  person Matt Raines    schedule 26.04.2018
comment
Это должно быть довольно просто. PDO имеет хорошую онлайн-документацию. Дайте нам знать, если у вас есть дополнительные конкретные вопросы.   -  person Matt Raines    schedule 26.04.2018


Ответы (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,
    ]);
}

Предполагая, что с вашим столом все в порядке, это должно сработать.

person Zlatan Omerović    schedule 26.04.2018