在同一个表中插入或更新多个相同名称但不同的id

x33g5p2x  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(185)

我需要插入或更新多个同名但ID不同的行。。下面是一个示例表

order | event_name | event_id | sport_id
1     | EPL        | 46       | 1
2     | EPL        | 47       | 1
3     | EPL        | 48       | 1
4     | ISL        | 59       | 1

上表在三行上显示了相同的事件名称epl,但具有不同的事件id。。我需要根据不同的事件\u id插入或更新它们,但它会触发事件\u name上的重复条目。

$sql = "SELECT event_name FROM dbs_events where event_id = '$event_id '";
             $result = $conn->query($sql);

            if ($result->num_rows > 0) {
                $row = $result->fetch_assoc();
                $sql = "UPDATE dbs_events SET event_name = '$event_name', sport_id = '$sport_id' WHERE event_id = '$event_id' ";
            } else {   
                $sql = "INSERT INTO dbs_events (event_id, event_name, sport_id, event_sort_order) VALUES ('$event_id', '$event_name', '$sport_id', '$event_sort_order')";

            }

在这种情况下,重复密钥更新或最后一次\u insert \u id()似乎不起作用,因为我需要插入预定义值而不是增量值。

sg2wtvxw

sg2wtvxw1#

表中的引号之间有一个额外的空格 Where 你的身体状况 Select 查询: '$event_id ' . 这会导致查询不返回结果,即使 $event_id 确实存在。这就是为什么,你的 if 条件总是试图做一个 Insert ,导致重复输入错误。
把这当作开始使用准备好的语句的一个教训。此外,您的查询会受到sql注入相关的攻击。
请尝试以下操作(使用准备好的语句):

$sql = "SELECT event_name FROM dbs_events where event_id = ?";

// Prepare the SQL statement, bind the parameters and then execute
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $event_id);
$stmt->execute();

// Fetch the results now
$result = $stmt->get_result();

// Close the statement
$stmt->close();

if ($result->num_rows > 0) {
    $row = $result->fetch_assoc(); // I am not sure what you need this for

    // Preparing Update query statement; binding params and execute
    $sql = "UPDATE dbs_events
           SET event_name = ?, 
               sport_id = ? 
           WHERE event_id = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param('sii', $event_name, $sport_id, $event_id);
    $stmt->execute();
    $stmt->close();

} else {   

    // Preparing Insert query statement; binding params and execute
    $sql = "INSERT INTO dbs_events 
           (event_id, event_name, sport_id, event_sort_order) 
           VALUES            
           (?,?,?,?)";
            $stmt = $conn->prepare($sql);
    $stmt->bind_param('isii', $event_id, $event_name, $sport_id, $event_sort_order);
    $stmt->execute();
    $stmt->close();

}

相关问题