簡體   English   中英

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

[英]Insert or update multiple same name but different ids in same table

我需要插入或更新具有相同名稱但不同 ID 的多行.. 這是一個示例表

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

上表在三行上顯示了相同的 event_name EPL,但具有不同的 event_id。我需要根據不同的 event_id 插入或更新所有這些,但它觸發了 event_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')";

            }

DUPLICATE KEY UPDATE 或 LAST_INSERT_ID() 在這種情況下似乎不起作用,因為我需要插入預定義的值而不是增量值。

Select查詢的Where條件中的引號之間有一個額外的空格: '$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();

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM