2014-10-16 123 views
1

我有一個簡單的MySQL查詢:PHP檢查是否MySQL查詢是一個插入或更新

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

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

+1

可能的複製http://stackoverflow.com/a/10709458/4099592 – slapyo 2014-10-16 23:38:12

+0

可能重複[如何,如果「對重複密鑰更新」的行插入或更新使用時,知道嗎?](HTTP:/ /stackoverflow.com/questions/10709380/how-to-know-if-when-using-on-duplicate-key-update-a-row-was-inserted-or-update) – 2014-10-16 23:41:29

+0

獲取最後一個插入ID。在更新的情況下,與使用mysql_affected_rows相比,它將爲空 – Zalaboza 2014-10-16 23:50:19

回答

1

這樣做的一種方法是在執行查詢之前獲取行數,然後在執行查詢後獲取行數,如果不相等,則表示插入了新行並且如果它們是相等,這意味着一行已更新。的

$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. 
+1

非常低效 – 2014-10-16 23:51:19