Saya memiliki tabel tempat data baru sering dimasukkan. Saya perlu mendapatkan ID terakhir dari tabel. Bagaimana saya bisa melakukan ini?
Apakah itu mirip dengan SELECT MAX(id) FROM table
?
Saya memiliki tabel tempat data baru sering dimasukkan. Saya perlu mendapatkan ID terakhir dari tabel. Bagaimana saya bisa melakukan ini?
Apakah itu mirip dengan SELECT MAX(id) FROM table
?
INSERT
dan kueri untuk MAX(id)
, Anda mungkin mendapatkan id yang bukan id terakhir Anda .
Jawaban:
Jika Anda menggunakan PDO, gunakan PDO::lastInsertId
.
Jika Anda menggunakan Mysqli, gunakan mysqli::$insert_id
.
Jika Anda masih menggunakan Mysql:
Tolong, jangan gunakan
mysql_*
fungsi dalam kode baru . Mereka tidak lagi dipertahankan dan secara resmi tidak digunakan lagi . Lihat kotak merah ? Pelajari tentang pernyataan yang disiapkan , dan gunakan PDO atau MySQLi - artikel ini akan membantu Anda memutuskan yang mana. Jika Anda memilih PDO, berikut adalah tutorial yang bagus .
Tetapi jika harus, gunakan mysql_insert_id
.
mysql_insert_id
tepat setelah Anda mysql_query
. Jika tentu saja Anda menjalankan beberapa kueri lain pada koneksi yang sama di antaranya, yah, tidak ada yang dapat membantu Anda di sana.
PDO
bias ini yang kita lihat di mana-mana? Mari kita lihat lagi perbandingan fiturnya . Jelas itulah mysqli
pemenangnya ketika Anda perlu mengotori tangan Anda dengan barang-barang level rendah. Dengan kata lain, bahkan jika seseorang memilih PDO, pada akhirnya dia harus mysqli
tetap menggunakannya .
ada fungsi untuk mengetahui apa yang terakhir dimasukkan ke dalam koneksi saat ini
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
ditambah menggunakan max adalah ide yang buruk karena dapat menyebabkan masalah jika kode Anda digunakan pada waktu yang sama dalam dua sesi yang berbeda.
Fungsi itu disebut mysql_insert_id
Tidak apa-apa. Anda juga dapat menggunakan LAST_INSERT_ID ()
select max(id)from table
tidak apa-apa?
Dengan PDO :
$pdo->lastInsertId();
Dengan Mysqli :
$mysqli->insert_id;
Tolong, jangan gunakan mysql_*
fungsi dalam kode baru . Mereka tidak lagi dipertahankan dan secara resmi tidak digunakan lagi . Lihat kotak merah ? Pelajari tentang pernyataan yang disiapkan , dan gunakan PDO atau MySQLi - artikel ini akan membantu Anda memutuskan yang mana. Jika Anda memilih PDO, berikut adalah tutorial yang bagus .
Apa yang Anda tulis akan memberi Anda id
asumsi terbesar bahwa mereka unik dan bertambah otomatis yang akan baik-baik saja dengan asumsi Anda baik-baik saja dengan mengundang masalah konkurensi.
Karena Anda menggunakan MySQL sebagai database Anda, ada fungsi spesifiknyaLAST_INSERT_ID()
yang hanya berfungsi pada koneksi saat ini yang melakukan penyisipan.
PHP menawarkan fungsi khusus untuk itu juga disebut mysql_insert_id
.
Coba ini harus bekerja dengan baik:
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);
echo mysqli_insert_id($link);
Anda bisa mendapatkan id terbaru yang dimasukkan dengan fungsi php bawaan mysql_insert_id();
$id = mysql_insert_id();
Anda juga mendapatkan id terbaru dengan
$id = last_insert_id();
Untuk mendapatkan id yang terakhir dimasukkan ke dalam codeigniter Setelah menjalankan query insert cukup gunakan satu fungsi yang disebut insert_id()
pada database, itu akan mengembalikan id yang terakhir dimasukkan
Ex:
$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id
dalam satu baris
echo $this->db->insert('mytable',$data)->insert_id();
Tidak apa-apa untuk digunakan mysql_insert_id()
, tetapi ada satu catatan khusus tentang penggunaannya, Anda harus memanggilnya setelah kueri INSERT dieksekusi, artinya dalam sesi skrip yang sama. Jika Anda menggunakannya, itu tidak akan berfungsi dengan benar.
CATATAN: jika Anda melakukan beberapa penyisipan dengan satu pernyataan mysqli :: insert_id tidak akan benar.
Meja:
create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));
Sekarang jika Anda melakukannya:
insert into xyz (name) values('one'),('two'),('three');
Mysqli :: insert_id akan menjadi 1 bukan 3.
Untuk mendapatkan nilai yang benar lakukan:
mysqli::insert_id + mysqli::affected_rows) - 1
Ini telah menjadi dokumen tetapi agak tidak jelas.
Saya lebih suka menggunakan sintaks MySQL murni untuk mendapatkan id auto_increment terakhir dari tabel yang saya inginkan.
php mysql_insert_id () dan mysql last_insert_id () hanya memberikan ID transaksi terakhir.
Jika Anda menginginkan ID auto_incremented terakhir dari tabel mana pun dalam skema Anda (tidak hanya satu transaksi terakhir), Anda dapat menggunakan kueri ini
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME = 'my_table_name';
Itu dia.
Sedih tidak melihat jawaban dengan contoh.
Menggunakan Mysqli :: $ insert_id :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$mysqli->query($sql);
$last_inserted_id=$mysqli->insert_id; // returns last ID
Menggunakan PDO :: lastInsertId :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID
Menggunakan MySQLi
transaksi terkadang saya tidak bisa mendapatkan mysqli::$insert_id
, karena mengembalikan 0. Apalagi jika saya menggunakan prosedur tersimpan, yang mengeksekusi INSERT
s. Jadi ada cara lain dalam bertransaksi:
<?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;
}
?>
Gunakan mysqli karena mysql merendahkan
<?php
$mysqli = new mysqli("localhost", "yourUsername", "yourPassword", "yourDB");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Conside employee table with id,name,designation
$query = "INSERT INTO myCity VALUES (NULL, 'Ram', 'Developer')";
$mysqli->query($query);
printf ("New Record has id %d.\n", $mysqli->insert_id);
/* close connection */
$mysqli->close();
?>
Saya mencoba
mysqli_insert_id ($ dbConnectionObj)
Ini mengembalikan id koneksi yang dimasukkan terakhir jadi jika Anda mengelola koneksi Anda dengan benar ini harus bekerja. Setidaknya bekerja untuk saya.
Dari semua pembahasan ini saya berasumsi bahwa alasan untuk mengecek max id adalah untuk mengetahui apa id selanjutnya .. (jika max id saya adalah 5 maka selanjutnya akan menjadi 5 + 1 = 6).
>> Jika ini bukan alasannya, mohon maaf yang terbaik
Kasus jika orang lain INSERT informasi antara CHECK dan INSERT akan memberikan ID yang salah.
Jadi bisa diatasi jika Anda akan membuat hash yang bisa menyertakan timestamp atau nilai unik lainnya.
Kemudian di fungsi yang sama Anda dapat memasukkan informasi Anda dengan nilai kosong dan hash Anda. Itu akan membuat ID jika Anda memilih AUTO_INCRECEMENT.
Kemudian dalam fungsi yang sama Anda masih memiliki hash dan Anda dapat mencari id dengan hash yang sama. Dan kemudian Anda dapat menyelesaikan mengisi nilai-nilai kosong dengan mysql UPDATE.
Ini termasuk sedikit lebih banyak koneksi, tetapi ini masih cara untuk melakukannya ...
Semoga berhasil menyelesaikannya.
Jika tabel Anda memiliki kolom AUTO INCREMENT seperti UserID, Emp_ID, .. maka Anda dapat menggunakan query ini untuk mendapatkan record terakhir yang dimasukkan SELECT * FROM table_name dimana UserID = (pilih MAX (UserID) dari table_name) Dalam kode PHP:
$con = mysqli_connect('localhost', 'userid', 'password', 'database_name');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
$sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)";
$result = mysqli_query($con, $sql);
Kemudian Anda dapat menggunakan data yang diambil sebagai kebutuhan Anda
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", ***mysql_insert_id()***);