2014-10-16 124 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