首页 > 解决方案 > 尝试在单个查询中更新多个数据库行,但不起作用

问题描述

我有一个将匹配数据(和其他数据)存储到数据库的 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 matchesSET homeTeamName='Manchester_United', homeTeamScore=2, awayTeamScore=1, awayTeamName='Leicester_City' WHERE matchId=111981; 更新matcheshomeTeamName='AFC_Bournemouth', homeTeamScore=2, awayTeamScore=0, awayTeamName='Cardiff_City' WHERE matchId=108933;

我错过了什么?

标签: phpxmldatabasemysqlisql-update

解决方案


推荐阅读