[英]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.