【问题标题】:How can I update json column with a correct data type with PDO?如何使用 PDO 更新具有正确数据类型的 json 列?
【发布时间】:2021-11-05 02:42:25
【问题描述】:

我有 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"}

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

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

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

【问题讨论】:

  • JSON_MERGE_PATCH(data, JSON_OBJECT(:key, :value + 0))
  • 请给我们看PHP代码。

标签: php mysql pdo mysql-json


【解决方案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)

【讨论】:

    猜你喜欢
    • 2015-05-28
    • 2013-02-05
    • 2016-05-01
    • 2020-06-13
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多