Php AWS DynamoDB getItem按用户名获取项目不起作用

Php AWS DynamoDB getItem按用户名获取项目不起作用,php,amazon-web-services,amazon-dynamodb,Php,Amazon Web Services,Amazon Dynamodb,我正在尝试使用数据库的用户名键检索数据库项。 我有以下PHP代码: $result = $DBclient->getItem(array( "TableName" => $TableName, "ConsistentRead" => true, "Key" => array( "username" => strtolower($_POST["username"]) ) )

我正在尝试使用数据库的用户名键检索数据库项。 我有以下PHP代码:

$result = $DBclient->getItem(array(
        "TableName" => $TableName,
        "ConsistentRead" => true,
        "Key" => array(
            "username" => strtolower($_POST["username"])
        )
    ));
运行后,会发生以下错误:

Fatal error: Uncaught Aws\DynamoDb\Exception\DynamoDbException: AWS Error Code: SerializationException, Status Code: 400, AWS Request ID: (...), AWS Error Type: client, AWS Error Message: Expected null, User-Agent: aws-sdk-php2/2.8.31 Guzzle/3.9.3 curl/7.51.0 PHP/5.6.30 thrown in (...)\vendor\aws\aws-sdk-php\src\Aws\Common\Exception\NamespaceExceptionFactory.php on line 91
我的表有三个键(索引、行…):用户名、密码和id(N)


我阅读了文档,但我认为这里遗漏了一些内容。

您需要指定
键的类型和值。您缺少类型

因此,您的代码应该是:

$result = $DBclient->getItem(array(
        "TableName" => $TableName,
        "ConsistentRead" => true,
        "Key" => array(
            "username" => array("S" => strtolower($_POST["username"]))
        )
    ));

表的分区键是什么?你说的三把钥匙是什么意思?请提供表的键定义?调用
getItem()
中的“键”参数需要是对DynamoDb表主键的完整引用。这意味着分配了分区键和排序键(如果有)。如果“username”不是主键,那么您可能希望使用
Scan()
方法,而不是
getItem()
@onceptQuest我的主键是username,它的辅助键是password。二级索引是email和id。我更改了它,现在它告诉我提供的键元素与schema@shanidahan您的表是否将用户名键作为字符串?