Google Bigquery - 运行参数化查询 - php

sea*_*ain 1 parameterized-query google-bigquery

来自 Google Bigquery 文档:

运行参数化查询

BigQuery 支持查询参数,以帮助防止使用用户输入构建查询时的 SQL 注入。此功能仅适用于标准 SQL 语法。

要指定命名参数,请使用 @ 字符后跟标识符,例如 @param_name。

Google Bigquery 有 python 和 Java 的示例代码来使用参数化查询。

https://cloud.google.com/bigquery/querying-data#bigquery-query-params-python

Google Bigquery 此处没有用于运行参数化查询的 php 示例代码。

我尝试在 php 中使用 @,就像在 python 和 java 代码中一样,但它不起作用。

有什么建议吗?

谢谢!

我根据 Elliott 和 Mosha 的要求添加了代码

代码:

 $query = "SELECT * FROM [myproject.mydateset.users]  where user_id = '$userId' LIMIT 1000";
$queryResults = $this->bigQuery->runQuery($query);
Run Code Online (Sandbox Code Playgroud)

这个查询没问题。但这并不能阻止sql注入。

我尝试将查询更改为

$query = "SELECT * FROM [myproject.mydateset.users]  where user_id = '@$userId' LIMIT 1000";
Run Code Online (Sandbox Code Playgroud)

或者

$query = "SELECT * FROM [myproject.mydateset.users]  where user_id = @$userId LIMIT 1000";
Run Code Online (Sandbox Code Playgroud)

防止sql注入。这两个查询都不起作用。

web*_*etc 6

我尝试了这个并成功了..[google-BigQuery]

$cloud = new ServiceBuilder([
    'keyFilePath' => 'project-auth-file.json'
]);

$bigQuery = $cloud->bigQuery();

 $query = 'select id 
             from `api-project-id.dbname.tablename` 
            where userId = @user_id;';

 $_userId = 202;

 $queryJobConfig = $bigQuery->query($query)
      ->parameters([
          'user_id' => (int)$_userId
      ]);

  $queryResults = $bigQuery->runQuery($queryJobConfig);

  foreach ($queryResults as $row) {
      echo "<br>". $row['id'];
  }
Run Code Online (Sandbox Code Playgroud)

{google-BigQuery}