【问题标题】:DynamoDB PHP update-itemDynamoDB PHP 更新项
【发布时间】:2017-10-18 18:46:23
【问题描述】:

我有一张简单的小桌子,我只想更新它。在文档中花费了数小时并进行了测试,但无法弄清楚。

我的桌子:

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

主键在“环境”上

我要做的就是将 'who' 设置为 'ben' where 'environment' = 'ax'。

我尝试过传统的做事方式和表达方式。我还尝试了 AWS 在其文档中使用的方括号表示法和 php.ini 的 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"}'

非常感谢任何帮助。

【问题讨论】:

  • 您收到什么错误消息?你的帖子读起来像一个声明,而不是一个问题。确切的问题是什么?
  • @MarkB 我已经更新了我的帖子,现在包含我收到的错误消息。我尝试的每一种不同的方法都会遇到同样的错误。

标签: php amazon-web-services amazon-dynamodb aws-sdk


【解决方案1】:

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

$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";
}

【讨论】:

  • 我不久前终止了这个项目,因为它是一个工作的副项目,它从来没有受到关注。我没有代码了,也没有它运行的环境。我不确定我是否被允许这样做,但我会相信您的解决方案并将其标记为正确。
猜你喜欢
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2019-02-16
  • 1970-01-01
相关资源
最近更新 更多