Intereting Posts
Как отправить пустой массив из формы HTML Form на PHP Удалить бесполезные нулевые цифры из десятичных знаков в PHP POST / Redirect выбрасывает ошибку браузера «Соединение было сброшено» Как вы читаете из многомерного варианта массива, возвращаемого из COM-объекта в PHP? найти значение в многомерном массиве и получить его путь в PHP Запрос по запросу Symfony2 Doctrine используя Google Docs в качестве базы данных? Как отображать категории и конечные подкатегории с помощью PHP и MySQL? Ошибка при установке драйвера mongo для PHP на amazon linux Каскадный список выбора как настраиваемое поле с использованием hook_field_widget_form в drupal 7 Phpbrew на ubuntu – как сменить версию? Изменение размера изображений с помощью PHP Поддерживаемые форматы ImageMagick не имеют значения MySQL Создать триггер Вставить содержимое в другую таблицу из одной базы данных Как создать тело электронной почты в php

Проблема с SDK для PHP (DynamoDB)

Недавно DynamoDB выпустил типы документов (список или карту). См. Здесь: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes или здесь: http://www.allthingsdistributed.com/2014/10/document-model-dynamodb .html

Теперь я пытаюсь сохранить следующий массив в DynamoDB

array("key"=>"value") 

Я использую PHP SDK 2.7.0 и 2.7.2 и 3.0.0 beta (пробовал все это, чтобы решить мою проблему, каждый раз в той же проблеме). Мой код, ниже которого хранится две строки, отлично работает :

 require ("aws2.7.0/aws-autoloader.php"); use Aws\DynamoDb\DynamoDbClient; $client = DynamoDbClient::factory(array( 'key' => 'KEY', 'secret' => 'SECRET', 'region' => 'eu-west-1' )); $result = $client->putItem(array( 'TableName' => 'requests-test', 'Item' => array( 'messageId' => array('S' => "test-message1"), 'data' => array('S' => "message-data-here"), ), ) )); 

Теперь я пытаюсь сохранить простой массив с типом данных карты вместо строки:

 require ("aws2.7.0/aws-autoloader.php"); use Aws\DynamoDb\DynamoDbClient; $client = DynamoDbClient::factory(array( 'key' => 'KEY', 'secret' => 'SECRET', 'region' => 'eu-west-1' )); $result = $client->putItem(array( 'TableName' => 'requests-test', 'Item' => array( 'messageId' => array('S' => "test-message1"), 'data' => array('M' => array("key"=>"value")), ), ) )); 

это приводит к следующей ошибке:

Fatal error: Uncaught Aws \ DynamoDb \ Exception \ DynamoDbException: AWS Код ошибки: SerializationException, код состояния: 400, AWS Идентификатор запроса: 8H9URPVBNPCTG4VALA62XXXX3NVV4KQNSO5AEMVJF66Q9ASUAYGX, AWS Тип ошибки: клиент, AWS Сообщение об ошибке: Ожидаемый null, User-Agent: aws-sdk- php2 / 2.7.0 Guzzle / 3.9.2 curl / 7.36.0 PHP / 5.3.28 в /path/aws2.7.0/Aws/Common/Exception/NamespaceExceptionFactory.php в строке 91

AWS PHP SDK 2.7.0 и выше должны поддерживать тип карты и списка: https://github.com/aws/aws-sdk-php/releases/tag/2.7.0

Как хранить массивы в DynamoDB? Возможно ли еще с текущими SDK там – или им нужно выпустить обновление, чтобы полностью поддерживать эти новые типы данных? Или проблема в моем коде?

Я был бы очень благодарен за любые комментарии или возможные решения. Заранее спасибо!

В DynamoDB значение документа (списка или карты) должно быть значением атрибута.

 'Item' => array( 'messageId' => array('S' => "test-message1"), 'data' => array('M' => array("key"=> array('S' => "value"))), ), ) 

Аналогично в списке у вас будет следующее:

 array('L' => array( array('S' => "key"), array('S' => "value"))); 

Надеюсь, это поможет!

Это в PHP

У меня была одна и та же проблема, и мысль здесь несколько объясняется здесь, вот что, наконец,

 $res =$this->dynamodb->updateItem([ 'TableName' => 'your_table', 'Key' => [ 'key1' => ['N' => $detail1, 'key2' => ['S' => $detail2, "ExpressionAttributeNames" => ["#theList" => "my_list_iten_name"], "ExpressionAttributeValues" => [ ':empty_list' => ['L'=>[]], ':addVal' => [ 'L' => [ [ 'M' => [ 'val1' => ['S' => 'one'], 'val2' => ['S' => 'two!!!'], ] ], [ 'M' => [ 'val1' => ['S' => 'one1'], 'val2' => ['S' => 'two2!!!'], ] ] ] ] ], 'UpdateExpression' => 'SET #theList = list_append(if_not_exists(#theList, :empty_list), :addVal)', ]);