gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:42:35 24 4
gpt4 key购买 nike

我有一些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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com