Ich denke, Sie müssen entweder die Transaktions-ID in Ihrer Anwendung oder die Artikel-ID in Ihrer Anwendung verarbeiten, um dies fehlerfrei zu tun.
Ein Weg, dies zu tun, der funktionieren könnte, vorausgesetzt, alle Ihre Einfügungen sind erfolgreich (!), Ist der folgende:
Sie können dann die eingefügten IDs mit einer Schleife für die Anzahl der betroffenen Zeilen abrufen, beginnend mit lastid (dies ist die erste eingefügte ID der Masseneinfügung). Und so habe ich überprüft, ob es perfekt funktioniert. Sei nur vorsichtig, dass HeidiSQL zum Beispiel nicht den richtigen Wert für ROW_COUNT () zurückgibt, wahrscheinlich weil es eine beschissene GUI ist, die zufällige Scheiße macht Kommandozeile oder PHP mysqli -
START TRANSACTION;
BEGIN;
INSERT into test (b) VALUES ('1'),('2'),('3');
SELECT LAST_INSERT_ID() AS lastid,ROW_COUNT() AS rowcount;
COMMIT;
In PHP sieht es so aus (local_sqle ist ein direkter Aufruf von mysqli_query, local_sqlec ist ein Aufruf von mysqli_query + Konvertieren der Ergebnismenge in ein PHP-Array):
local_sqle("START TRANSACTION;
BEGIN;
INSERT into test (b) VALUES ('1'),('2'),('3');");
$r=local_sqlec("SELECT LAST_INSERT_ID() AS lastid,ROW_COUNT() AS rowcount;");
local_sqle("
COMMIT;");
$i=0;
echo "last id =".($r[0]['lastid'])."<br>";
echo "Row count =".($r[0]['rowcount'])."<br>";
while($i<$r[0]['rowcount']){
echo "inserted id =".($r[0]['lastid']+$i)."<br>";
$i++;
}
Der Grund, warum die Abfragen getrennt sind, liegt darin, dass ich mein Ergebnis sonst nicht mit meinen eigenen Funktionen erhalten würde. Wenn Sie dies mit Standardfunktionen tun, können Sie es wieder in eine Anweisung setzen und dann das gewünschte Ergebnis abrufen (es sollte die Ergebnisnummer sein 2 - vorausgesetzt, Sie verwenden eine Erweiterung, die mehr als eine Ergebnismenge / Abfrage verarbeitet).