簡體   English   中英

PHP 檢查 MYSQL 查詢是插入還是更新

[英]PHP check if MYSQL query was an insert or update

我有一個簡單的 MYSQL 查詢:

INSERT INTO table (col1,col2) VALUES ('1','2') 
ON DUPLICATE KEY UPDATE col1 = '1', col2 = '2'

我使用 PHP PDO 語句來查詢數據庫。 有沒有辦法知道執行的查詢是否導致新插入的行或現有的更新?

一種方法是在執行查詢之前獲取行數,然后在執行查詢后獲取行數,如果它們不相等,則表示插入了新行,如果它們相等,則表示更新了一行。

$sql = "SHOW TABLE STATUS LIKE 'TABLE_NAME'";
$stmt = $pdo->prepare($sql); 
$stmt->execute(); 
$row = $stmt->fetch();
$number_of_rows_before = $row['Rows'];
// Do your query here, afterwards
$stmt = $pdo->prepare($sql); 
$stmt->execute(); 
$row = $stmt->fetch();
$number_of_rows_after = $row['Rows'];
// If condition
if($number_of_rows_before == $number_of_rows_after) // Update was executed
else // a new row was inserted. 

只需使用mysqli_affected_rows ,它就會返回受上次 INSERT、UPDATE、REPLACE 或 DELETE 查詢影響的行數。

來自 PHP 文檔:

在“INSERT ... ON DUPLICATE KEY UPDATE”查詢的情況下,如果執行了插入,則返回值將是 1,或者對於現有行的更新,返回值將是 2。

https://www.php.net/manual/en/function.mysql-affected-rows.php

從Mysql手冊:

“使用 ON DUPLICATE KEY UPDATE,如果將行作為新行插入,每行的受影響行值為 1,如果更新現有行,則為 2。”

請參閱:http ://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

這是最可靠的方法。

也許您將答案直接放入查詢中,例如:

INSERT INTO table (col1,col2, col_type) VALUES ('1','2','inserted') ON DUPLICATE KEY UPDATE col1 = '1', col2 = '2', col_type = 'updated'

暫無
暫無

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

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