代码之家  ›  专栏  ›  技术社区  ›  Sathishkumar

DynamoDB getItem PHP问题

  •  0
  • Sathishkumar  · 技术社区  · 3 年前

    不确定,从DynamoDB获取项目时出现了什么问题。

    Json-数据视图:

    {
     "section_id": "6177d23bb5f04ca363fe3d91",
     "chapter_id": "6177ccd4b5f04ca363fe3d63",
     "data": {
     }
    }
    

    PHP代码:

        $sdk = $this->sdk();
        $dynamodb = $sdk->createDynamoDb();
    
        $result = $dynamodb->getItem(
            array(
                'TableName' => 'sections',
                'Key'   => array(
                    'section_id'   => array(
                        'S' => '6177d23bb5f04ca363fe3d91'
                    )
                )
            )
        );
        print_r($result);
        exit;
    

    我遇到错误

    Type: Aws\DynamoDb\Exception\DynamoDbException
    Message: Error executing "GetItem" on "https://dynamodb.ap-south-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://dynamodb.ap-south-1.amazonaws.com` resulted in a `400 Bad Request` response: {"__type":"com.amazon.coral.validate#ValidationException","message":"The provided key element does not match the schema" (truncated...) ValidationException (client): The provided key element does not match the schema - {"__type":"com.amazon.coral.validate#ValidationException","message":"The provided key element does not match the schema"}
    
    0 回复  |  直到 3 年前
        1
  •  2
  •   Arpit Jain    3 年前

    考虑到错误,这里可能有两个问题:

    1. 您只提供了一半的主键。对于初级 键,您必须提供所有属性。例如,对于a 简单的主键,您只需要为 分区键。对于复合主键,您必须提供值 对于分区键和排序键。
    2. 字段的值应具有与表一致的正确数据类型。它是 最好仔细检查值的数据类型 通过。也许,你已经将主键定义为数字,你是 在getItem调用中传递一个字符串值。
        2
  •  0
  •   Brian    3 年前

    错误消息告诉问题:“提供的键元素与架构不匹配”

    section_id是你的主键吗?如果是这样,你可以这样试试:

    $result = $dynamodb->getItem(
        [
            'TableName' => 'sections',
            'Key' => [
                'section_id' => ['S' => '6177d23bb5f04ca363fe3d91'],
            ],
        ]
    );
    

    您正在向GetItem调用提供数组,但需要提供主键。

    请参阅: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html