Saya memiliki sebuah tabel data baru yang sering dimasukkan. Saya perlu untuk mendapatkan yang terakhir ID dari tabel. Bagaimana saya bisa melakukan ini?
Itu mirip dengan SELECT MAX(id) DARI tabel
?
Jika anda're menggunakan PDO, gunakan PDO::lastInsertId
.
Jika anda're menggunakan Mysqli, gunakan mysqli::$insert_id
.
Jika anda're masih menggunakan Mysql:
*Mohon, don't menggunakan `mysql_` fungsi dalam kode baru**. Mereka tidak lagi dipertahankan dan resmi usang. Lihat merah kotak? Belajar tentang menyiapkan laporan sebagai gantinya, gunakan PDO atau MySQLi - artikel ini akan membantu anda memutuskan yang mana. Jika anda memilih PDO, di sini adalah tutorial.
Tetapi jika anda harus, gunakan mysql_insert_id
.
ada fungsi untuk mengetahui apakah ada id yang dimasukkan pada saat ini koneksi
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
plus menggunakan max adalah ide yang buruk karena hal itu bisa menyebabkan masalah jika kode ini digunakan pada saat yang sama dalam dua sesi yang berbeda.
Fungsi yang disebut mysql_insert_id
Dengan PDO:
$pdo->lastInsertId();
Dengan Mysqli:
$mysqli->insert_id;
*Mohon, don't menggunakan `mysql_` fungsi dalam kode baru**. Mereka tidak lagi dipertahankan dan resmi usang. Lihat merah kotak? Belajar tentang menyiapkan laporan sebagai gantinya, gunakan PDO atau MySQLi - artikel ini akan membantu anda memutuskan yang mana. Jika anda memilih PDO, di sini adalah tutorial.
Apa yang anda tulis akan mendapatkan terbesar id
asumsi mereka yang unik dan otomatis bertambah itu akan baik-baik saja dengan asumsi anda baik-baik saja dengan mengundang masalah concurrency.
Karena anda're menggunakan MySQL sebagai database anda, ada fungsi tertentu LAST_INSERT_ID()
yang hanya bekerja pada saat ini koneksi yang melakukan insert.
PHP menyediakan fungsi khusus untuk itu juga disebut mysql_insert_id
.
It's ok untuk menggunakan mysql_insert_id()
,
tapi ada satu catatan khusus tentang menggunakannya, anda harus menyebutnya setelah dieksekusi MENYISIPKAN query, berarti dalam naskah yang sama dengan sesi.
Jika anda menggunakannya kalau tidak,'t bekerja dengan benar.
Untuk mendapatkan lalu dimasukkan id di codeigniter
Setelah melaksanakan menyisipkan query hanya menggunakan satu fungsi yang disebut insert_id()
pada database, maka akan kembali lalu dimasukkan id
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();
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);
Saya lebih suka menggunakan murni MySQL syntax untuk mendapatkan lalu auto_increment id dari tabel yang saya inginkan.
php mysql_insert_id() dan mysql last_insert_id() hanya memberikan ID transaksi terakhir.
Jika anda ingin lalu auto_incremented ID dari setiap tabel dalam skema anda (tidak hanya transaksi terakhir satu), anda dapat menggunakan query ini
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME = 'my_table_name';
Yang's ini.
CATATAN: jika anda melakukan beberapa sisipan dengan satu pernyataan mysqli::insert_id tidak akan benar.
Tabel:
membuat tabel xyz (id int(11) auto_increment, nama varchar(255), primary key(id));
Nah, jika anda lakukan:
masukkan ke xyz (nama) values('satu'),('dua'),('tiga');
Mysqli::insert_id akan menjadi 1 tidak 3.
Untuk mendapatkan nilai yang benar anda lakukan:
mysqli::insert_id + mysqli::affected_rows) - 1
Ini telah mendokumentasikan tapi itu sedikit kabur.
It's sedih untuk 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 saya kadang-kadang tidak't bisa mendapatkan mysqli::$insert_id
, karena itu kembali 0. Terutama jika saya menggunakan prosedur yang tersimpan, yang mengeksekusi `INSERT. Jadi ada cara lain dalam transaksi:
<?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;
}
?>
Menggunakan mysqli seperti mysql adalah depricating
<?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();
?>
Dengan semua pembahasan ini saya berasumsi bahwa alasan untuk memeriksa max id adalah untuk mengetahui apa yang harus berikutnya.. (jika saya max id adalah 5 maka selanjutnya akan menjadi 5+1=6).
>>Jika ini bukan alasan, yang terbaik maaf
Jika orang lain Sisipan informasi antara CEK dan MASUKKAN akan memberikan salah ID.
Sehingga hal Itu dapat diatasi jika anda akan membuat hash yang dapat mencakup timestamp atau nilai yang unik.
Kemudian dalam fungsi yang sama anda dapat memasukkan informasi anda dengan nilai-nilai kosong dan anda hash. Yang akan membuat ID jika anda memiliki AUTO_INCRECEMENT dipilih.
Kemudian dalam fungsi yang sama, anda masih akan memiliki hash anda dan anda bisa mencari id dengan hash yang sama. Dan kemudian anda bisa mengisi nilai kosong dengan mysql UPDATE.
Ini termasuk sedikit lebih banyak koneksi, tapi masih merupakan cara untuk melakukannya...
Good luck pemecahan itu.
Jika tabel anda memiliki AUTO INCREMENT kolom seperti UserID,Emp_ID,.. maka anda dapat menggunakan query ini untuk mendapatkan lalu dimasukkan rekor *SELECT FROM table_name where UserID=(select MAX(Id)from 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 sudah diambil sebagai kebutuhan anda