2015-12-06 49 views
1

使用PHP-GDS库时,当密钥格式为“__xyz__”时尝试“插入”实体时会收到异常。找到异常:关键路径元素名称“__xyz__”无效

有没有办法解决这个问题,因为关键是我可能无法控制的用户名,__xyz__是一个完全有效的用户名。下面的代码和异常消息:

$username = "__xyz__"; 

$obj_user = new Entity(); 
$obj_user->setKeyName($username); 
try { 
    $result = $obj_user_store->upsert($obj_user); 
}catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
    return false; 
} 

例外:

Caught exception: The key path element name "__xyz__" is reserved. 

回答

1

不幸的是没有,你要编码用户名某种方式。或者,我建议使用自动生成的密钥,并将用户提供的数据存储在值中,而不是密钥。

文档是非常糟糕的这种情况下,只有一个关于提到,在替代的Python API,用于数据存储的文档:https://cloud.google.com/appengine/docs/python/datastore/entities:“键的名称不能开始,以两个下划线__*__结束”。 Java文档不会对此说任何话。也不是现代的Python API。我找不到Datastore的任何PHP文档。

但是它对于所有的API都是一样的,因为异常发生在数据库端,所以使用哪种语言并不重要(它是所有的protobufs)。

我知道双下划线的只有一个用途:当您生成一个查询,并希望升序排序/按键下降。您可以通过使用名为__key__的不存在的保留密钥进行排序来完成此操作。