调用存储过程时面对未定义的索引:schema

问题描述 投票:0回答:1

我正在尝试从 PHP 的 Google BigQuery 客户端 执行存储过程。

我刚刚替换了存储过程来代替查询。

require 'vendor/autoload.php';



// $query = <<<ENDSQL
// SELECT
//   CONCAT(
//     'https://stackoverflow.com/questions/',
//     CAST(id as STRING)) as url,
//   view_count
// FROM `bigquery-public-data.stackoverflow.posts_questions`
// WHERE tags like '%google-bigquery%'
// ORDER BY view_count DESC
// LIMIT 10;
// ENDSQL;

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
$projectId = 'project id';
$query = 'CALL spname';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$jobConfig = $bigQuery->query($query);
$job = $bigQuery->startQuery($jobConfig);

$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
$queryResults = $job->queryResults();

$i = 0;
foreach ($queryResults as $row) {
    printf('--- Row %s ---' . PHP_EOL, ++$i);
    foreach ($row as $column => $value) {
        printf('%s: %s' . PHP_EOL, $column, json_encode($value));
    }
}
printf('Found %s row(s)' . PHP_EOL, $i);

执行脚本后出现以下错误。请帮助如何执行存储过程。

我们面临的错误来自 google 大查询库,文件名:google/cloud-bigquery/src/QueryResults.php

注意:未定义索引:第 162 行 /var/www/html/bigquery/vendor/google/cloud-bigquery/src/QueryResults.php 中的架构

php stored-procedures google-bigquery
1个回答
0
投票

发生这种情况的原因有多种,但似乎适合您场景的一个原因是您的存储过程中没有

SELECT
。 尝试修改您的 SP,在
SELECT 'successful' AS status;
之前添加类似
END
的内容。 另外,您可以添加检查以确保 $queryResults 在迭代之前有数据

if ($queryResults->isComplete() && $queryResults->rows()->valid()) {
    foreach ($queryResults as $row) {
        // logic here
    }
} else {
    echo 'No results returned from the stored procedure.';
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.