2017-01-14 11 views
1

私は更新したい単純な小さなテーブルを持っています。ドキュメントやテスト用のもので時間を費やしても、それを理解することはできません。DynamoDB PHP update-item

マイテーブル:

|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

@マークB私は私が得るエラーメッセージを含めるために私のポストを更新しました。私はそれをしようとするさまざまな方法のそれぞれで同じエラーを取得します。 –

答えて

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

私はこのプロジェクトを仕事のための副プロジェクトであったので、もう少し前に殺しました。私はもうコードを持っていないし、コードを実行した環境もありません。私はこれをすることが許されているかどうかはわかりませんが、私は解決のためにあなたの言葉を取り、正しいものとしてマークします。 –

関連する問題