PHP nasıl bir MySQL tablo son eklenen kimliği ne?

11 Cevap php

Ben yeni veriler sık ​​sık sokulduğu bir tablo var. Ben tablonun son kimliğini almak gerekir. Bunu nasıl yapabilirim?

O SELECT MAX(id) FROM table benzer mi?

11 Cevap

Eğer PDO kullanarak ediyorsanız, PDO::lastInsertId kullanın.

Eğer mysqli kullanıyorsanız, mysqli::$insert_id kullanın.

Hala Mysql kullanıyorsanız:

Please, don't use mysql_* yeni kodu fonksiyonlar . Onlar artık tutulur and are officially deprecated. kırmızı kutu görmek ? {[(- hazırlanmış tablolara instead, and use PDO veya MySQLi hakkında bilgi alın 7)]} hangi karar vermenize yardımcı olacaktır. Eğer PDO seçerseniz, here is a good tutorial.

But if you have to, use mysql_insert_id .

Geçerli bağlantı takılı son id ne olduğunu bilmek bir işlevi var

mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();

kodunuzu iki farklı oturumlarda aynı anda kullanılması durumunda problems yol açabilir, çünkü plus kullanarak max bir bad idea olduğunu.

Bu işlev mysql_insert_id denir

Tamam. Ayrıca kullanabileceğiniz LAST_INSERT_ID()

Ile PDO,

$pdo->lastInsertId();

Ile Mysqli,

$mysqli->insert_id;

Please, don't use mysql_* yeni kodu fonksiyonlar . Onlar artık tutulur and are officially deprecated. kırmızı kutu görmek ? Hakkında bilgi edinin hazırlanmış tablolara instead, and use PDO veya {[(6)] } - this article hangi karar vermenize yardımcı olacaktır. Eğer PDO seçerseniz, here is a good tutorial.

mysql_insert_id() işlevini kullanın.

Benzer soruya bakın here

Sen yerleşik php işlevi mysql_insert_id(); tarafından son eklenen ID alabilirsiniz

$id = mysql_insert_id();

Bir de en son id almak

$id = last_insert_id();

$ Lastid = mysql_insert_id ();

NOT: Eğer bir deyimi ile çok sayıda ekleme yaparsanız mysqli :: insert_id doğru olmayacaktır.

Tablo:

create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));

Şimdi yaparsanız:

insert into xyz (name) values('one'),('two'),('three');

Mysqli :: insert_id 1 değil 3 olacaktır.

Doğru değeri yapmak almak için:

mysqli::insert_id + mysqli::affected_rows) - 1

Bu belge olmuştur ama biraz karanlık olduğunu.

Ben saklı prosedürler kullanıyordum Özellikle, yürütme INSERT s söyledi. 0 döndü çünkü MySQLi işlem kullanarak bazen, mysqli::$insert_id almak mümkün değildi. Yani işlem içinde başka bir yolu vardır:

<?php

function getInsertId(mysqli &$instance, $enforceQuery = false){
    if(!$enforceQuery)return $instance->insert_id;

    $result = $instance->query('SELECT LAST_INSERT_ID();');

    if($instance->errno)return false;

    list($buffer) = $result->fetch_row();

    $result->free();

    unset($result);

    return $buffer;
}

?>

Bütün bu tartışma ile (benim max id 5 ise o zaman önümüzdeki 5 +1 = 6 olacak) .. max kimliğini kontrol etmek neden kimliği yanında olmak gerektiğini bilmek olduğunu varsayalım.

>>If this is not the reason, my best apologies

Çantası KONTROL ve INSERT arasında başkasının ınsert'ler bilgiler, yanlış kimlik verecekti.

Eğer damgası veya diğer benzersiz bir değer içerebilir karmasını oluşturmak olurdu Yani bu çözülebilir.

Sonra aynı işlevi boş değerleri ve karma ile bilgilerinizi ekleyebilirsiniz. Seçtiğiniz AUTO_INCRECEMENT varsa bu kimliği yaratacak.

Then in the same function you would still have your hash and you could look for id with the same hash. And then you could complete populating empty values with mysql UPDATE.

Bu biraz daha bağlantıları kapsar, ama yine de bunu yapmak için bir yoldur ...

İyi şanslar bunu çözmek.

mysql_query ("mytable (ürün) değerleri ('kossu') INSERT INTO");

printf ("Son kayıt kimliği% d \ n var takılı", *mysql_insert_id()*);