PHP检查MYSQL查询是否为插入或更新

时间:2014-10-16 23:34:54

标签: php mysql

我有一个简单的MYSQL查询:

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

我使用PHP PDO语句来查询数据库。有没有办法知道执行的查询是否导致新的插入行或现有的更新?

3 个答案:

答案 0 :(得分: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 :(得分:0)

也许您将答案直接输入查询中,例如:

插入表(col1,col2,col_type)VALUES('1','2','inserted') 重复键更新时col1 ='1',col2 ='2',col_type ='updated'

答案 2 :(得分:0)

仅使用 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

这是最可靠的方法。