26

mySQL だけを使用してこれに対するいくつかの回答を見つけましたが、PHP を使用して挿入/更新を処理するときに、mysql DB の最後に挿入または更新された行の ID を取得する方法を誰かが教えてくれることを望んでいました。

現在、私はこのようなものを持っています。ここで、column3 は一意のキーであり、自動インクリメントされた主キーである id 列もあります。

$query ="INSERT INTO TABLE (column1, column2, column3) VALUES (value1, value2, value3) ON DUPLICATE KEY UPDATE SET column1=value1, column2=value2, column3=value3";
mysql_query($query);

$my_id = mysql_insert_id();

$my_id は INSERT では正しいですが、行を更新しているとき (ON DUPLICATE KEY UPDATE) は正しくありません。

次のようなものを使用するようにアドバイスする人々の投稿をいくつか見ました

INSERT INTO table (a) VALUES (0) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id) 

ON DUPLICATE KEY が呼び出されたときに有効な ID 値を取得するには、有効な ID を PHPmysql_insert_id()関数に返しますか?

4

4 に答える 4

39

アレクサンドルが提案した答えは次のとおりです。

id=LAST_INSERT_ID(id) を使用すると、mysql_insert_id = 更新された ID の値が設定されるため、最終的なコードは次のようになります。

<?
    $query = mysql_query("
        INSERT INTO table (column1, column2, column3) 
        VALUES (value1, value2, value3) 
        ON DUPLICATE KEY UPDATE
            column1 = value1, 
            column2 = value2, 
            column3 = value3, 
            id=LAST_INSERT_ID(id)
    ");
    $my_id = mysql_insert_id();

これにより、更新または挿入に関係なく、$my_id の正しい値が返されます。

于 2010-04-16T01:41:42.353 に答える
10

クエリが挿入か更新かを確認できます ( mysql_affected_rows(); は挿入時に 1 を返し、更新時に 2 を返します)。

挿入の場合は mysql_insert_id を使用し、更新の場合は別のクエリが必要になります。

<?php
$query ="INSERT INTO TABLE (column1, column2, column3) VALUES (value1, value2, value3) ON DUPLICATE KEY UPDATE SET column1=value1, column2=value2, column3=value3";
mysql_query($query);
if(mysql_affected_rows() == 1) { $id = mysql_insert_id(); }
else { // select ... 
}
?>

私はそれがあなたが探しているものではないことを知っていますが、それは私が思いつくことができる最高のものです

于 2010-04-14T10:08:43.980 に答える