我有一个简单的MYSQL查询:
INSERT INTO table (col1,col2) VALUES ('1','2')
ON DUPLICATE KEY UPDATE col1 = '1', col2 = '2'
我使用PHP PDO语句来查询数据库。有没有办法知道执行的查询是否导致新的插入行或现有的更新?
答案 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
这是最可靠的方法。