8

次のようなクエリがあります。

$a = $members->prepare("insert into a(name) values(:name) 
                            on duplicate key update name = :name");

それから私がするとき:

$insert_id = $a->lastInsertId()

クエリが行を正常に挿入した場合は、期待どおりに挿入 ID を返します。行を更新した場合は、更新された行 ID も期待どおりに返します (並べ替え)。しかし、すべてが同じであるために何も挿入または更新しなかった場合は、0 を返します。

これはかなり論理的なデフォルトの動作だと思いますが、実際に行の何かを変更したときのように、更新しようとした行のIDを返すことができるように変更する方法はありますか.

ありがとう。

4

2 に答える 2

21

これに関する答えを見つける場所はたくさんありますが、PDO への特異性が検索結果を妨げている可能性があります...

最初に、DOCSの下部に記載されているように、句に必ず追加id=LAST_INSERT_ID(id)してください。この場合の は、主キーの列名です (そのため、タイトルが付けられている場合と付けられていない場合があります)。ON DUPLICATEidid

また、機能させるには、シーケンス オブジェクト引数を指定する必要がある場合があります->lastInsertId()。以前に特定の状況でその問題に遭遇したことがあります。

于 2013-03-12T22:22:01.290 に答える
2

いいえ、行がないため、更新を「試みます」。また、注意してください。同じセッションでその前に別の挿入クエリがあった場合、LAST_INSERT_ID()その前のクエリから値を取得できます。

于 2013-03-12T22:21:57.913 に答える