将多个记录插入表中

时间:2018-02-20 19:36:43

标签: google-api-php-client google-fusion-tables

我目前正在执行official api source.

的步骤

在项目的当前状态下,我从表中获取信息,更改和插入数据,没有任何错误。

但是我想在我的表格中进行批量插入。

这是我的代码:

$array = array();
foreach ($objects as $object) {
    array_push(
        $array,
        "('".$object->lat.",".$object->lng."','".$object->other->lat.",".$object->other->lng."')"
    );
}
$values = implode(",", $array);
$client = new Google_Client();
$tableId = "TableId";
$client->useApplicationDefaultCredentials();
$client->setScopes('https://www.googleapis.com/auth/fusiontables');
$service = new Google_Service_Fusiontables($client);

$service->query->sql("INSERT INTO ".$tableId." ('Location', 'City Location') VALUES ".$values); // I'm sorry, I forgot.

当我尝试在不使用相同代码的情况下输入记录时,它可以正常工作

当您有多条记录时,这是我的sql变量:

INSERT INTO TableId 
('Location', 'City Location') 
VALUES 
('88.064342,-50.280747','-8.77,-36.62'),
(-55.781345,-69.294770','-28.24,-48.67'),
('14.696452,-26.844802','-19.92,-43.17')

api返回以下错误:

{  
  "error":{  
    "errors":[  
      {  
        "domain":"fusiontables",
        "reason":"badQueryCouldNotParse",
        "message":"Invalid query: Parse error near ',' (line 1, position 92).",
        "locationType":"parameter",
        "location":"q"
      }
    ],
    "code":400,
    "message":"Invalid query: Parse error near ',' (line 1, position 92)."
  }
}

2 个答案:

答案 0 :(得分:1)

您不能使用单个INSERT语句添加多行 - 您需要为每组值使用一个语句。对于批量插入,您可能希望使用importRows而不是multiple INSERT statements,因为它通常更快,更可靠,并且还消耗更少的配额。

PHP API doc for importRows
如果您转到importRows路线,请记下standard parameters,因为您将以这种方式传递新行。相关问题12

答案 1 :(得分:0)

我认为这不是Google服务问题,更多是您的结束查询字符串的格式。您可能缺少报价或缺少括号。

// Flatten the array of objects into values per entry
$location_values = array_map($objects, function($object) {
    [
         $object->lat,
         $object->lng,
         $object->other->lat,
         $object->other->lng,
    ];
}

// $location_values will be a multidimensional array, we need to turn it to a string
$location_values_stringified = array_reduce($location_values, function($final_string, $location) {
    // to turn an array into a string
   $location_string = implode($location, ',');
   // wrap the string in parenthesis
   $location_string = sprintf('(%s)', $location_string);
   return $final_string . ',' . $location_string;
}, '');

// build query string
$query = sprintf("INSERT INTO %s ('Location', 'City Location') VALUES %s", $tableId, $location_values_stringified);

我实际上并没有在PHP中执行此操作,因此可能存在语法错误或2,但让您与所需格式相似:

INSERT INTO TableId 
('Location', 'City Location') 
VALUES 
('88.064342,-50.280747','-8.77,-36.62'),
(-55.781345,-69.294770','-28.24,-48.67'),
('14.696452,-26.844802','-19.92,-43.17')

如果您需要检查$query,请在发送至die(var_dump($query));之前使用$service。祝你好运。