【发布时间】:2021-01-31 10:44:33
【问题描述】:
我正在尝试使用 updateItem 作为 PHP AWS SDK 版本 3 的一部分更新 DynamoDB 中的记录。
我要更新的字段应该包含一个数值。
如果我运行此代码,我会收到错误:
$params = array(
'TableName' => $table,
'Key' => array('id' => array('S' => $id) ),
'UpdateExpression' => 'set newField = :val',
'ExpressionAttributeValues' => array(
':val' => array('N' => 99)
),
'ReturnValues' => 'ALL_NEW'
);
print_r($params);
$result = $client->updateItem($params);
错误:
Client error: `POST https://dynamodb.eu-west-2.amazonaws.com` resulted in a `400 Bad Request`
response: {"__type":"com.amazon.coral.service#SerializationException","Message":"NUMBER_VALUE cannot be converted to String"}
但如果我修改:
':val' => array('N' => 99)
成为:
':val' => array('N' => "99")
或者
':val' => array('N' => (string)99)
然后请求成功,更新Dynamo。如果我转到 Dynamo 控制台,那么我可以看到更新的记录,并且该字段正确显示为 Number 类型。
是否有更好的方法来处理使用整数更新 DynamoDB 记录的过程,将其转换为字符串,以便 PHP SDK 工作似乎不是最好的方法?
【问题讨论】:
标签: amazon-web-services amazon-dynamodb aws-php-sdk