6

回答后编辑:我认为这是我自己的代码中的一个错误——我不知道它是什么,但我继续修复它。请参阅下面的答案。

我正在使用 MySQL/PHP 执行一系列 INSERT ... ON DUPLICATE KEY UPDATE 语句。我读过的文档表明这将返回的行数:

-1 : an error
0 : update, no changes to row made (i.e. all values duplicated)
1 : row inserted
2 : update performed on row with duplicate key

但是,我只看到 0 的结果,而我应该看到 2 (因为我正在查看代码更新各种数据库值。)这是代码:

$stmt = $db->prepare('INSERT INTO sometable (`id`, `name`, `email`) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE `name` = ?, `email` = ? ;');

$stmt->execute( array ( $id, $name, $email, $name, $email ) );

$rc = $stmt->rowCount();
echo $rc;

$rc 总是出现 0 进行更新(即使值确实发生了更改)或 1 (如预期的那样成功插入。)

我错过了什么?:)

4

2 回答 2

3

尝试使用MySQL函数,如果返回正确的结果,问题将是PDO:rowCount()

$stmt = $db->prepare('INSERT INTO table (`id`, `name`, `email`) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE `name` = ?, `email` = ? ;');

$stmt->execute( array ( $id, $name, $email, $name, $email ) );

$rc = $db->query("SELECT ROW_COUNT()")->fetchColumn();
echo $rc;
于 2012-08-29T02:33:20.407 回答
0

我认为rowCount()是为了返回SELECT语句中返回的行数。

从手册

PDO::exec — 执行一条 SQL 语句并返回受影响的行数

尝试exec()改用。

于 2012-08-29T16:19:48.377 回答