Nasıl PDO son MySQL id takılı biliyor?

0 Cevap php

EDIT: Bu soru başlık aslen: How does Doctrine know last inserted id in MySQL? ve Doctrine ORM eşleştiricisine ilgiliydi. Bazı kazma sonra ben bu soru Doctrine ama ilişkili olmadığını öğrendim PDO_MySQL, MySQL C API ve nihayet - MySQL istemci-sunucu iletişimi için. Ben başlığı değiştirmek için karar verdik, belki birileri onun / onun sorusuna cevap bulacaksınız.

Doktrini kullanarak olmayanlar için: Merak ettim, neden feryat:

mysql_query("INSERT INTO category (name) VALUES('cat')");
echo mysql_insert_id();

veya benzeri:

$pdo->exec("INSERT INTO category (name) VALUES('cat')");
echo $pdo->lastInsertId();

tek (ayrı olmadan SELECT LAST_INSERT_ID()) pozisyonuna günlüğüne yol açacaktır:

1701 Query    INSERT INTO category (name) VALUES ('cat')

Original question:

Ben 2 tablolar var:

category(id,name)
product(id, name, categoryId)

Ben yeni bir kategori nesnesi ve ürün nesnesi oluşturulur. Ben ürün nesnesine kategori nesne atanır. Ben herhangi bir kimlikleri set vermedi:

$product = new Product();
$product->name = 'asdf';

$category = new Category();
$category->name = 'cat';

$product->Category = $category;

Bundan sonra ben bağlantıyı kızardı ve MySQL günlüklerini kontrol edin:

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

Nasıl Doktrin yeni oluşturulan kategori id 312 olduğunu, biliyor muydunuz? Günlüklerinde başka bir şey yoktur.

0 Cevap