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

ただし、2 が表示されるはずの 0 の結果しか表示されません (コードがさまざまなデータベース値を更新するのを見ているためです)。コードは次のとおりです。

$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 に答える