如何知道是否插入了新行,或者是否更新了现有行?

时间:2014-01-05 20:23:25

标签: php mysql sql pdo

在MySQL(使用PDO)中使用ON DUPLICATE KEY UPDATE时,如何检查现有行是否已更新,或者是否已插入新行?我正在使用PHP的PDO和准备好的查询来插入:

$sql = "INSERT INTO some_table (f_name, l_name) ";
$sql.= "VALUES (:f_name, :l_name) ";
$sql.= "ON DUPLICATE KEY UPDATE ";
$sql.= "    f_name = VALUES(f_name) ";
$sql.= "    l_name = VALUES(l_name) ";

$stmt = $pdo->prepare($sql);
$stmt->bindValue(':f_name', 'Jeff');
$stmt->bindValue(':l_name', 'Atwood');
$stmt->execute();

现在我想根据需要输出Updated!Added!。我怎么检查这个?

1 个答案:

答案 0 :(得分:3)

您可以通过检查受影响的行数进行检查。

每当插入一行时,它返回与插入行数完全相同的数字。但是,当它更新时,它乘以2并作为受影响的行返回。

例如,

如果要添加两行,和 行创建:受影响的行将为2 行已更新:受影响的行将为4

参考:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

另外,要检查受影响的行数,可以使用rowCount函数(http://in3.php.net/manual/en/pdostatement.rowcount.php