如何使用 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)
.
我有 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)
.