php - while循环中使用INSERT语句的多个REST-API请求

标签 php mysql rest mysqli

我有一些ID值阵列,可用来从REST-API源中获取一些数据并将其插入到本地数据库中。

由于存在多个不同的ID,因此我在PHP中使用while()循环对每个ID进行REST-API调用。但是它没有按预期工作。当我运行php脚本时,只有与第一个ID相关的数据才插入数据库中

$matches=mysqli_query($conn, "SELECT distinct m.match_id as uid from Matches m;");

$rows = mysqli_fetch_all($matches, MYSQLI_ASSOC);
foreach($rows as $match) {

//get API

$login = '*******';
$password = '*******';
$url = 'https://api.*****.****/api/export/*****/match/'. $match[0] .'/events';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
$result = curl_exec($ch);
curl_close($ch);

$query = '';
$json_array = json_decode($result, true);

foreach($json_array as $row) {
    //Build multiple insert query 
    $query .= "INSERT INTO `live_events` set 
          `utakmica`  = ". $match['uid'] .",
          `id`  = '". $row['id'] ."',
          `matchphase`  = '". $row['matchPhase'] ."', 
          `minute`   = '". $row["minute"] ."',
          `second` = '". $row["second"] ."',
          `stoppagetime` = '". $row["stoppageTime"] ."',
          `eventtype` = '". $row["eventType"] ."',
          `eventdetailtype` = '". $row["eventDetailType"] ."',
          `playerfifaid` = '". $row["playerFifaId"] ."',
          `playerfifaid2` = '". $row["playerFifaId2"] ."',
          `matchteam` = '". $row["matchTeam"] ."',
          `penaltyorder` = '". $row["penaltyorder"] ."',
          `personname` = '". $row["personName"] ."',
          `localpersonname` = '". $row["localPersonName"] ."',
          `personname2` = '". $row["personName2"] ."',        
          `localpersonname2` = '". $row["localPersonName2"] ."'
          ;";



        }


    mysqli_multi_query($conn, $query);
    mysqli_free_result($query);
}


运行脚本时,对于第一个匹配ID,我将获得插入到数据库中的正确JSON文件。很好。

但是对于第二场比赛ID,我没有得到任何新数据。实际上,当我手动检查JSON文件时,尽管脚本已请求API数据15次(对于15个ID),但只有第一个具有相同数据的JSON数组(与第一个匹配ID相关)。

服务器是否可能在短时间内拒绝任何其他请求,或者在我发出另一个请求之前我需要清空一些变量?

PHP循环工作正常。 $ url相应地更改为下一个元素,但是我从API获得的数据使我感到困惑。

PS。我根据新信息更新了问题。问题不在于请求,而在于将数据插入mysql数据库。无论我做什么,数据库中只会写入第一个JSON数组。

最佳答案

您使用的功能不正确!如果您希望收到一个列表并对列表的每个元素执行某项操作,则应执行以下操作:

while($match = mysqli_fetch_array($matches, MYSQLI_ASSOC)) {
    // Do whatever you want with $match
}


要么

$rows = mysqli_fetch_all($matches, MYSQLI_ASSOC);
foreach($rows as $match) {
  // Do whatever you want with $match
}


甚至

while ($match = $matches->fetch_assoc()) {
    // Do whatever you want with $match
}

关于php - while循环中使用INSERT语句的多个REST-API请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57446158/

相关文章:

rest - ColdFusion 11 是否支持 HTTP DELETE 动词的正文内容

java - 如何通过restful web服务返回集合对象

php - php - mysql select语句中的2个while循环

php - mysql, php, 如何比较数字

java - 我的 Like Query JDBC(Derby) 有什么问题

php - Mysql ORDER BY 使用日期数据行

rest - 带有过滤的 HTTP PUT 仍然是幂等的吗?

php - 应用多个时区的最佳方式是什么?

javascript - 使用CSS在ajax中聊天div

php - 无法在 Cygwin 上全局安装 Composer