首页 文章

Cloud 数据存储API - php - GqlQuery - 绑定args

提问于
浏览
0

我正在尝试将一些参数绑定到我的GQL查询字符串 . 当我运行查询而不绑定任何东西时,一切都很好:

$ result = $ DB-> query_entities(“SELECT * FROM kind WHERE fieldName = 4 LIMIT 1”);

但我不知道如何绑定一些论点 . 这就是我试图这样做的方式:

function query_entities($query_string, $args=[]){       
    $gql_query = new Google_Service_Datastore_GqlQuery();
    $gql_query->setQueryString($query_string);
    $gql_query->setAllowLiteral(true);

    if( !empty($args) ){
        $binding_args = [];

        foreach ($args as $key => $value) {
            $binding_value = new Google_Service_Datastore_Value();
            $binding_value->setIntegerValue($value);

            $arg = new Google_Service_Datastore_GqlQueryArg();
            $arg->setName($key);
            $arg->setValue($binding_value);

            $binding_args[] = $arg;
        }

        $gql_query->setNameArgs($binding_args);
    }

        $req = new Google_Service_Datastore_RunQueryRequest();
        $req->setGqlQuery($gql_query);

        return $this->dataset->runQuery($this->dataset_id, $req, []);
}

$exampleValue = 4;

$result = $DB->query_entities("SELECT * FROM kind WHERE fieldName = :fieldName LIMIT 1", ["fieldName" => $exampleValue]);

要么:

function query_entities($query_string, $args=[]){       
    $gql_query = new Google_Service_Datastore_GqlQuery();
    $gql_query->setQueryString($query_string);
    $gql_query->setAllowLiteral(true);

    if( !empty($args) ){
        $binding_args = [];

        foreach ($args as $value) {
            $binding_value = new Google_Service_Datastore_Value();
            $binding_value->setIntegerValue($value);

            $arg = new Google_Service_Datastore_GqlQueryArg();
            $arg->setValue($binding_value);

            $binding_args[] = $arg;
        }

        $gql_query->setNumberArgs($binding_args);
    }

        $req = new Google_Service_Datastore_RunQueryRequest();
        $req->setGqlQuery($gql_query);

        return $this->dataset->runQuery($this->dataset_id, $req, []);
}

$exampleValue = 4;

$result = $DB->query_entities("SELECT * FROM kind WHERE fieldName = :1 LIMIT 1", [$exampleValue]);

这就是我得到的:'错误调用POST https://www.googleapis.com/datastore/v1beta2/datasets/age-of-deployment/runQuery:(400)第1行第52列的词汇错误 . 遇到:":"(58),之后:“”'在......

1 回答

  • 1

    Cloud Datastore GQLPython GQL (App Engine)处理参数绑定略有不同 .

    在这种情况下,您需要使用 @ 而不是 : ,例如:

    SELECT * FROM kind WHERE fieldName = @fieldName LIMIT 1
    

    要么

    SELECT * FROM kind WHERE fieldName = @1 LIMIT 1
    

    这是Cloud Datastore GQL中的参数绑定reference documentation .

相关问题