EDIT: Dieser Fragetitel war ursprünglich: Woher kennt Doctrine die zuletzt eingefügte ID in MySQL? und war verwandt mit Doktrin ORM Mapper. Nach etwas graben fand ich heraus, dass diese Frage nicht mit Doctrine sondern mit PDO_MySQL, MySQL C API und schließlich - zu MySQL Client-Server-Kommunikation verbunden ist. Ich habe mich entschieden, den Titel zu ändern, vielleicht findet jemand eine Antwort auf seine/ihre Frage.Woher weiß PDO die zuletzt eingefügte ID in MySQL?
Für diejenigen, die nicht Lehre mit: Ich war neugierig, warum unten:
mysql_query("INSERT INTO category (name) VALUES('cat')");
echo mysql_insert_id();
oder ähnlich:
$pdo->exec("INSERT INTO category (name) VALUES('cat')");
echo $pdo->lastInsertId();
wird nur eine Position führen (ohne gesonderte SELECT LAST_INSERT_ID()
) in Protokoll:
1701 Query INSERT INTO category (name) VALUES ('cat')
Original Frage:
Ich habe 2 Tabellen:
category(id,name)
product(id, name, categoryId)
Ich habe neue Kategorie Objekt und Produkt-Objekt. Ich habe dem Produktobjekt ein Kategorieobjekt zugewiesen. Ich habe festgelegt keine ids:
$product = new Product();
$product->name = 'asdf';
$category = new Category();
$category->name = 'cat';
$product->Category = $category;
Danach habe ich die Verbindung gespült und überprüfen MySQL Logs:
1684 Query START TRANSACTION
1684 Query INSERT INTO category (name) VALUES ('cat')
1684 Query INSERT INTO product (name, categoryid) VALUES ('asdf', '312')
1684 Query COMMIT
Wie haben Lehre wissen, dass die neu geschaffene Kategorie-ID 312 ist? Es gibt nichts anderes in den Protokollen.
Große Forschung. – jensgram
Deshalb können wir es verwenden, ohne Angst vor Abfragerennen. Vielen Dank. – noober