【问题标题】:How to know if new row was inserted, or if extant row was updated?如何知道是否插入了新行,或者是否更新了现有行?
【发布时间】:2014-01-05 20:23:24
【问题描述】:

在 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!。我该如何检查?

【问题讨论】:

    标签: php mysql sql pdo


    【解决方案1】:

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

    每当插入一行时,它都会返回与插入行数完全相同的数字。但是,当它更新时,它乘以 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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2012-12-06
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      相关资源
      最近更新 更多