You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用DynamoDB getItem接口遇键元素与Schema不匹配错误求助

DynamoDB GetItem 报错:提供的键元素与架构不匹配

问题概述

调用DynamoDB的GetItem接口获取数据时,返回400 Bad Request错误,提示「提供的键元素与架构不匹配」。

数据示例

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

调用代码

$sdk = $this->sdk();
$dynamodb = $sdk->createDynamoDb();

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

错误信息

类型: Aws\DynamoDb\Exception\DynamoDbException
消息: 执行 "GetItem" 接口时出错,请求地址:https://dynamodb.ap-south-1.amazonaws.com;AWS HTTP错误:客户端错误:`POST https://dynamodb.ap-south-1.amazonaws.com` 返回 `400 Bad Request` 响应:{"__type":"com.amazon.coral.validate#ValidationException","message":"提供的键元素与架构不匹配"(已截断...)ValidationException (客户端): 提供的键元素与架构不匹配 - {"__type":"com.amazon.coral.validate#ValidationException","message":"提供的键元素与架构不匹配"}

解决方案

DynamoDB的GetItem接口要求必须传入完整的主键(如果是复合主键,则需要同时提供分区键和排序键)。从数据示例可以看出,sections表的主键是复合主键:section_id为分区键,chapter_id为排序键。原代码只传入了section_id,缺少排序键chapter_id,导致与表的架构不匹配。

修改后的代码如下:

$sdk = $this->sdk();
$dynamodb = $sdk->createDynamoDb();

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

内容的提问来源于stack exchange,提问作者Sathishkumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:00:52