Ich habe ein paar Antworten dafür mit mySQL allein gefunden, aber ich hatte gehofft, jemand könnte mir einen Weg zeigen, um die ID der zuletzt eingefügten oder aktualisierten Zeile zu bekommen eine mysql-DB, wenn PHP verwendet wird, um die Einfügungen/Aktualisierungen zu handhaben.mysql_insert_id() während der Verwendung von ON DUPLICATE KEY UPDATE mit PHP
Zur Zeit habe ich so etwas wie diese, wo column3 ein eindeutiger Schlüssel ist, und es gibt auch eine ID-Spalte, die ein autoinkrementierten Primärschlüssel ist:
$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 $ korrekt auf INSERT, aber falsch, wenn es eine Aktualisierung Zeile (ON DUPLICATE KEY UPDATE).
Ich habe mehrere Beiträge gesehen mit Menschen beraten, dass Sie so etwas wie
INSERT INTO table (a) VALUES (0) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id)
verwenden Sie einen gültigen ID-Wert zu erhalten, wenn der ON DUPLICATE KEY invoked-- ist, aber diese Rückkehr, dass gültige ID an den PHP mysql_insert_id()
Funktion?
Ich habe keine Antwort. Aber die Lösung sieht clever aus. Warum versuchst du es nicht? Ich denke, es sollte nicht schwer sein, einen Testfall zu erstellen, der eine definitive Antwort geben würde. PS .: Versteh mich aber nicht falsch; Ich kann verstehen, dass Sie sich beruhigen wollen. Ich würde wahrscheinlich auch. Aber ich würde es zuerst versuchen, denke ich. :) –
Ich war neugierig, wie das funktionieren könnte, aber ich fand dies im MySQL-Handbuch: * Wenn Ausdruck LAST_INSERT_ID() als Argument angegeben wird, wird der Wert des Arguments von der Funktion zurückgegeben und als der nächste Wert an erinnert von LAST_INSERT_ID() * zurückgegeben werden. –
@Alexandre: Ja, und vorausgesetzt, mysql_insert_id() 'ist nur ein Proxy für' LAST \ _INSERT \ _ID() 'Ich würde denken, dies sollte wie erwartet funktionieren. –