php - 尝试在单个查询中更新多个数据库行,但不起作用
问题描述
我有一个将匹配数据(和其他数据)存储到数据库的 php 脚本。我以前用 foreach 让它通过 xml 文件运行,并一次存储/更新每条记录 1。
鉴于有超过 3,000 条比赛记录,更新时需要 45 秒以上才能完成。所以我试图通过使用一个查询而不是数千个单独的查询来做到这一点。
$updateQuery = "";
$data = simplexml_load_file('$url');
foreach($data->match as $match) {
$matchId = intval($match->id);
$homeTeamName = $match->homeTeamName;
$homeTeamScore = intval($match->homeTeamScore);
$awayTeamScore = intval($match->awayTeamScore);
$awayTeamName = $match->awayTeamName;
// Check if record exists
$query = "SELECT `matchId` FROM `matches` WHERE `matchId` = " . $matchId;
$result = mysqli_query($mysqli,$query);
if(mysqli_num_rows($result) == 1 ){
$updateQuery .= "UPDATE `matches`
SET
`homeTeamName`='" . $homeTeamName . "',
`homeTeamScore`=" . $homeTeamScore . ",
`awayTeamScore`=" . $awayTeamScore . ",
`awayTeamName`='" . $awayTeamName . "'
WHERE `matchId`=" . $matchId . "; ";
} else {
$sql_statement="INSERT INTO `matches`
(`matchId`, `homeTeamName`, `homeTeamScore`, `awayTeamScore`, `awayTeamName`)
VALUES
(" . $matchId . ",
'" . $homeTeamName . "',
" . $homeTeamScore . ",
" . $awayTeamScore . ",
'" . $awayTeamName . "')";
mysqli_query($mysqli,$sql_statement);
}
}
mysqli_query($mysqli,$updateQuery);
请忽略两种类型的查询(更新/插入),一旦我让更新工作,我将更改插入查询以类似地工作。
我发现当我查看 $updateQuery 的结果时,我可以手动选择它,将其放入 phpmyadmin sql 条目中,它可以工作,它会更新 thge 记录,因此创建的查询不是问题(片段以下)。但是当我运行 php 脚本时,数据库没有得到更新。
生成的查询片段:
UPDATE matches
SET homeTeamName
='Manchester_United', homeTeamScore
=2, awayTeamScore
=1, awayTeamName
='Leicester_City' WHERE matchId
=111981; 更新matches
集homeTeamName
='AFC_Bournemouth', homeTeamScore
=2, awayTeamScore
=0, awayTeamName
='Cardiff_City' WHERE matchId
=108933;
我错过了什么?
解决方案
推荐阅读
- vb.net - 没有 try-catch 的 WebRequest HTTP 错误代码 (VB.NET)
- c++ - 在 C++ 中按升序打印输出值
- reactjs - 在自定义输入元素上使用带有打字稿的 useRef
- javascript - 表单在服务器上不起作用,只能在移动版本上使用
- .net - MS 文档中 .NET 结构名称中的点是什么意思?
- python - 为什么我得到 NameError: name 'as_completed' is not defined (我有 from concurrent.futures import ThreadPoolExecutor)
- angular - 观察者订阅第一次没有加载,第一次加载到组件时没有触发
- azure - Azure B2C:获取自定义策略的内置声明列表
- flutter - 如何正确修复颤动中的行间距
- sql - 如何将不同类型的值从一列分配到各个列