DynamoDB PHP 更新项目

DynamoDB PHP update-item

我有一个简单的小 table,我只想更新它。花了几个小时查看文档并进行测试,无法弄清楚。

我的table:

|environment |who|
-------------------
|ax          |tom|

主键开启'environment'

我只想将 'who' 设置为 'ben',其中 'environment' = 'ax'。

传统的做事方式和表达方式我都试过了。我还尝试了 AWS 在其文档中使用的方括号符号和 php 的 array() 符号。以下是我尝试过的一些方法。

1:

$result = $client->updateItem(array(
    'ConditionExpression' => 'environment = :env',
    'ExpressionAttributeValues' => array(
        ':env' => array(
            'S' => 'environment'
        ),
        ':who' => array(
            'S' => $who
        )
    ),
    'Key' => array( // REQUIRED
        ':env' => array(
            'S' => $env
        )
    ),
    'ReturnValues' => 'UPDATED_NEW',
    'TableName' => 'areas',
    'UpdateExpression' => 'SET who = :who'
));

2:

$result = $client->updateItem([
    'ConditionExpression' => 'environment = :env',
    'ExpressionAttributeValues' => [
        ':env' => [
            'S' => 'environment'
        ],
        ':who' => [
            'S' => $who
        ]
    ],
    'Key' => [
        ':env' => [
            'S' => $env
        ]
    ],
    'ReturnValues' => 'UPDATED_NEW',
    'TableName' => 'areas',
    'UpdateExpression' => 'SET who = :who'
]);

3:

$result = $client->updateItem(array(
    'AttributeUpdates' => array(
        'who' => array(
            'Action' => 'PUT',
            'Value' => array(
                'S' => $who
            )
        )
    ),
    'Key' => array(
        'environment' => array(
            'S' => $env
        )
    ),
    'TableName' => 'areas'
));

编辑: 这是我遇到的错误:

 SerializationException (client): Start of list found where not expected - {"__type":"com.amazon.coral.service#SerializationException","Message":"Start of list found where not expected"}'

非常感谢任何帮助。

我遇到过类似的问题。这是我使用的代码并且有效。

$RegID = "abracadabra";
$tableName="DefaultDelivery";
$marshaler = new Marshaler();

$requested_delivery = '{"Packet0":{"PacketNo":"2","Quantity":"1000ml","Type":"Toned Milk"},"Packet2":{"PacketNo":"4","Quantity":"250ml","Type":"Toned Milk"}}';

$eav = $marshaler->marshalJson('
{
 ":RequestedDelivery" : '.$requested_delivery.'
}
');

$key = $marshaler->marshalJson('                                               
     {                                                                          
         "RegistrationID" : "'.$RegID.'"
     }                                                                          
');

$params = [
     'TableName' => "$tableName",
     'Key' => $key,
     'ExpressionAttributeValues' => $eav,
     'UpdateExpression' => 'SET RequestedDelivery = :RequestedDelivery',
     'ReturnValues' => 'UPDATED_NEW'
];

try {
    $result = $client->updateItem($params);
        echo "SUCCESS";
}
catch (DynamoDbException $e){
   echo "Unable to update Item : \n";
}