捕获异常:关键路径元素名称" __ xyz __"是无效的

时间:2015-12-06 15:39:46

标签: php google-app-engine

使用PHP-GDS库时,我在尝试“upsert”时遇到异常。当密钥格式为" __ 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 个答案:

答案 0 :(得分:1)

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

对于这种情况,文档非常糟糕,只有一个提及,在用于数据存储的取代Python API的文档中:https://cloud.google.com/appengine/docs/python/datastore/entities:“键名不能以两个下划线__*__开头和结尾”。 Java文档没有说明这一点。也不是现代的Python API。我找不到数据存储的任何PHP文档。

但是对于所有API来说都是一样的,因为异常发生在db-side上,所以你使用哪种语言并不重要(这是所有的protobufs)。

我只知道双下划线的一种用法:当您构建查询时,并希望按键对升序/降序进行排序。您可以通过按名为__key__的不存在的保留键进行排序来完成此操作。