如何使用 PDO 更新具有正确数据类型的 json 列?

How can I update json column with a correct data type with PDO?

我有 MySQL 5.7 和一个 PDO 查询:

    $data['id'] = 1;
    $data['key'] = 'new_field';
    $data['value'] = 1;
            
    $query= "
        UPDATE `table`
        SET `data` =  JSON_MERGE_PATCH(`data`, JSON_OBJECT(:key, :value))
        WHERE `id` = :id
    ";
    ...
    prepare($query);
    execute($data);

但之后我有:

id data
1 {"old_field": 2, "new_field": "1"}

为什么我的新值是字符串类型? 预期 table:

id data
1 {"old_field": 2, "new_field": 1}

我在不使用 PDO(JSON_OBJECT('new_field', 1)) 的情况下取得了成功,但我有一个使用占位符的字符串类型。

当您将数组传递给 PDOStatement::execute() 方法时,所有值都将转换为字符串。如果您希望 PDO 将它们保留为整数,您必须使用 bindValue() 绑定它们并提供将其标记为整数的类型提示。

$stmt = $pdo->prepare($sql);
$stmt->bindValue('key', 'new_field');
$stmt->bindValue('value', 1, PDO::PARAM_INT);
$stmt->execute();

或者,您可以将值转换为 SQL 中的整数,方法是向其添加零或使用 CAST(:value AS SIGNED).