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?
Eğer PDO kullanarak ediyorsanız, PDO::lastInsertId
a> kullanın.
Eğer mysqli kullanıyorsanız, mysqli::$insert_id
a> 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 em> 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 em> 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
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.