2017-01-14 96 views
1

我有一個簡單的小表,我只是想更新。花了幾個小時在文檔和測試的東西,無法弄清楚。DynamoDB PHP更新項目

我的表:

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

主鍵是「環境」

所有我想要做的是設置「誰」到「奔」,其中「環境」 =「斧頭」。

我已經嘗試了傳統的做事方式和表達方式。我還嘗試了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"}' 

任何幫助,這是非常讚賞。

+0

你會得到什麼錯誤信息?您的帖子看起來像一個聲明,而不是一個問題。什麼是確切的問題? –

+0

@MarkB我已更新我的帖子,現在包括我得到的錯誤消息。我嘗試着用不同的方法得到同樣的錯誤。 –

回答

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"; 
} 
+0

前段時間我殺了這個項目,因爲它是一個工作方面的項目,它從來沒有得到牽引。我沒有代碼了,也沒有它的運行環境。我不確定是否允許我這樣做,但我會聽取您的解決方案並將其標爲正確。 –