В этом коде я пытаюсь запустить select в таблице, которая не существует, getJobReference()
возвращает NULL
и мне бы хотелось поймать такую ошибку и хотелось бы получить сообщения об ошибках, полученные каким-то образом.
Как получить сообщение об ошибке, когда что-то не удается?
$client = new Google_Client(); $client->setApplicationName("Client_Library_Examples"); //$client->setDeveloperKey(API_KEY); if (isset($_SESSION['service_token'])) { $client->setAccessToken($_SESSION['service_token']); } $key = file_get_contents($key_file_location); $cred = new Google_Auth_AssertionCredentials( $service_account_name, array( 'https://www.googleapis.com/auth/bigquery', ), $key ); $client->setAssertionCredentials($cred); if ($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion($cred); } $_SESSION['service_token'] = $client->getAccessToken(); var_dump($_SESSION); $bq = new Google_Service_Bigquery($client); //build query $sql = 'select * from example.table LIMIT 10'; $job = new Google_Service_Bigquery_Job(); $config = new Google_Service_Bigquery_JobConfiguration(); $queryConfig = new Google_Service_Bigquery_JobConfigurationQuery(); $config->setQuery($queryConfig); $job->setConfiguration($config); $queryConfig->setQuery($sql); $insert = new Google_Service_Bigquery_Job($bq->jobs->insert(PROJECT_ID, $job)); $jr = $insert->getJobReference(); var_dump($jr);/*THIS RETURNS NULL */ $jobId = $jr['jobId']; $res = new Google_Service_Bigquery_GetQueryResultsResponse($bq->jobs->getQueryResults(PROJECT_ID, $jobId)); //see the results made it as an object ok: var_dump($res);
Их API автоматически создает некоторые классы на лету, а ошибки при съёмках производятся.
Я завершил процесс отладки, чтобы получить такие ошибки:
try { $job = $bq->jobs->insert(PROJECT_ID, $job); $status = new Google_Service_Bigquery_JobStatus(); $status = $job->getStatus(); // print_r($status); if ($status->count() != 0) { $err_res = $status->getErrorResult(); die($err_res->getMessage()); } } catch (Google_Service_Exception $e) { echo $e->getMessage(); exit; }
Общий способ – посмотреть, есть ли класс Status
для используемой службы. Блок Exception активируется только тогда, когда возникают ошибки, и это когда dryRun
.
$config->setDryRun(true);
Я не очень хорошо знаю этот SDK, но вы проверяли, есть ли у вас исключение?
try { $insert = new Google_Service_Bigquery_Job($bq->jobs->insert(PROJECT_ID, $job)); } catch (Exception $e) //or probably better Google_Exception { print('Something went wrong'); }