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
和unserialize()
将json_encode()
列更新为json格式,然后我可以得到:
id name hobby
1 jack ["swimming","football"]
2 mary ["music","TV"]
如何使用PDO进行操作?
答案 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你的桌子上的一切都没问题,这应该可以解决问题。