事务中的curl

rggaifut  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(272)

我正在使用googleclientapi来获取示例的状态,从而生成本地数据库副本。
可能有多张纸条更新了我的本地副本。我可以获取数据,当数据传回服务器时,其他脚本会修改数据。在我存储原始获取的数据之后,会创建一个丢失的更新。
因此,在进行更新时,我需要使用事务来阻止表中的所有其他通信
这是获取的代码:

<?php
require_once './gcloud/vendor/autoload.php';

$client = new Google_Client();
$client->setApplicationName('Google-ComputeSample/0.1');
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/cloud-platform');

$project = 'project_id';  // TODO: Update placeholder value.
$zone = 'us-east1-b';  // TODO: Update placeholder value.
$instance = 'instance-1';  // TODO: Update placeholder value.

$mysqli = new mysqli($hn, $un, $pw, $db);
$mysqli->begin_transaction();

$listInstancesJSON = $service->instances->listInstances($project, $zone, []);

//store it

$mysqli->commit();

提出请求时阻塞表听起来是个糟糕的主意。我想我再补充一句 ini_set('max_execution_time', 5); 在脚本开始时,以防fetch失败(我假定它们使用curl)。如果执行时间超过5s,即使脚本终止,我的表(或数据库)是否仍会被阻止?我还有其他的防御机制吗?
我计划每分钟都将此代码作为cron作业运行。

hk8txs48

hk8txs481#

听起来像 listInstances 需要相当于

SELECT ... FOR UPDATE

相关问题