2017-05-11 4 views
0

Ich versuche, ein Datenbankelement mit dem Benutzernamen Schlüssel meiner DB abrufen. Ich habe den folgenden PHP-Code:AWS DynamoDB getItem Element durch Benutzernamen nicht funktioniert

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

Nachdem es läuft, der folgende Fehler auftritt:

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 

Meine Tabelle drei Tasten hat (Indizes, Zeilen ...): Benutzername (S), Passwort (S), und ID (N)

Ich lese die Dokumentation, aber ich denke, ich vermisse etwas hier.

+0

Was die Partition Schlüssel der Tabelle ist? Was meinst du mit drei Schlüsseln? Bitte geben Sie die Schlüsseldefinition Ihrer Tabelle an. – notionquest

+0

Der Parameter "Key" im Aufruf von "getItem()" muss in seiner Gesamtheit eine Referenz auf den Primärschlüssel der DynamoDb-Tabelle sein. Das bedeutet den Partitionsschlüssel und auch den Sortierschlüssel, wenn Sie einen haben. Wenn 'Benutzername' nicht der Primärschlüssel ist, dann möchten Sie wahrscheinlich die 'Scan()' Methode anstelle von 'getItem()' verwenden. – Octopus

+0

@notionquest Mein Primärschlüssel ist *** Benutzername *** und sein Sekundärschlüssel ist *** Passwort ***. Die sekundären Indizes sind *** Email *** und *** ID ***. –

Antwort

1

Sie müssen den Typ Ihres Elements Key und den Wert angeben. Sie vermissen den Typ.

So sollte Ihr Code sein:

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

Ich habe es geändert und jetzt sagt es mir *** Das angegebene Schlüsselelement stimmt nicht mit dem Schema überein *** –

+0

@shanidahan Hat Ihre Tabelle einen Benutzernamenschlüssel als String? – user818510