ฉันมีตารางที่ใส่ข้อมูลใหม่บ่อยๆ ฉันต้องการรับ ID สุดท้ายของตาราง ฉันจะทำเช่นนี้ได้อย่างไร?
จะคล้ายกับSELECT MAX(id) FROM table
?
ฉันมีตารางที่ใส่ข้อมูลใหม่บ่อยๆ ฉันต้องการรับ ID สุดท้ายของตาราง ฉันจะทำเช่นนี้ได้อย่างไร?
จะคล้ายกับSELECT MAX(id) FROM table
?
INSERT
และแบบสอบถามสำหรับMAX(id)
คุณอาจได้รับรหัสที่ไม่ใช่รหัสสุดท้ายของคุณ
คำตอบ:
หากคุณใช้ PDO ให้ใช้PDO::lastInsertId
ไฟล์.
หากคุณกำลังใช้ MySQLi mysqli::$insert_id
ใช้
หากคุณยังคงใช้ Mysql:
กรุณาอย่าใช้
mysql_*
ฟังก์ชั่นในรหัสใหม่ พวกเขาจะไม่เก็บรักษาไว้และมีการยกเลิกอย่างเป็นทางการ เห็นกล่องสีแดงไหม เรียนรู้เกี่ยวกับคำสั่งที่เตรียมไว้แทนและใช้ PDOหรือ MySQLi -บทความนี้จะช่วยคุณตัดสินใจเลือก หากคุณเลือกที่ PDO,นี่คือการสอนที่ดี
แต่ถ้าต้องใช้mysql_insert_id
.
mysql_insert_id
ทันทีหลังจากที่mysql_query
คุณ หากแน่นอนว่าคุณดำเนินการค้นหาอื่น ๆ ในการเชื่อมต่อเดียวกันระหว่างกันก็ไม่มีอะไรที่จะช่วยคุณได้
PDO
เราเห็นทุกที่? มาดูการเปรียบเทียบคุณสมบัติอีกครั้ง ชัดเจนว่าmysqli
เป็นผู้ชนะเมื่อคุณต้องทำให้มือของคุณสกปรกด้วยของที่มีระดับต่ำ กล่าวอีกนัยหนึ่งแม้ว่าใครจะเลือก PDO แต่ในที่สุดเขาก็ต้องใช้mysqli
อยู่ดี
มีฟังก์ชั่นที่จะทราบว่า ID สุดท้ายที่แทรกอยู่ในการเชื่อมต่อปัจจุบันคืออะไร
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
การใช้maxเป็นความคิดที่ไม่ดีเพราะอาจทำให้เกิดปัญหาได้หากใช้โค้ดของคุณพร้อมกันในสองเซสชันที่ต่างกัน
ฟังก์ชันนั้นเรียกว่าmysql_insert_id
ไม่เป็นไร. นอกจากนี้คุณสามารถใช้LAST_INSERT_ID ()
select max(id)from table
ตกลง?
ด้วยPDO :
$pdo->lastInsertId();
กับMysqli :
$mysqli->insert_id;
กรุณาอย่าใช้mysql_*
ฟังก์ชั่นในรหัสใหม่ พวกเขาจะไม่เก็บรักษาไว้และมีการยกเลิกอย่างเป็นทางการ เห็นกล่องสีแดงไหม เรียนรู้เกี่ยวกับคำสั่งที่เตรียมไว้แทนและใช้ PDOหรือ MySQLi -บทความนี้จะช่วยคุณตัดสินใจเลือก หากคุณเลือกที่ PDO,นี่คือการสอนที่ดี
สิ่งที่คุณเขียนจะทำให้คุณได้รับสิ่งที่ยิ่งใหญ่ที่สุดid
โดยสมมติว่าพวกเขาไม่ซ้ำกันและเพิ่มขึ้นโดยอัตโนมัติซึ่งจะเป็นการดีโดยสมมติว่าคุณโอเคกับการเชิญชวนให้เกิดปัญหาพร้อมกัน
เนื่องจากคุณใช้ MySQL เป็นฐานข้อมูลของคุณจึงมีฟังก์ชันเฉพาะLAST_INSERT_ID()
ที่ใช้งานได้เฉพาะกับการเชื่อมต่อปัจจุบันที่ทำการแทรก
PHP mysql_insert_id
มีฟังก์ชั่นที่เฉพาะเจาะจงสำหรับการที่เรียกว่ามากเกินไป
ลองสิ่งนี้จะได้ผลดี:
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);
echo mysqli_insert_id($link);
เพื่อรับ id ที่แทรกล่าสุดใน codeigniter หลังจากดำเนินการค้นหาการแทรกเพียงใช้ฟังก์ชันเดียวที่เรียกinsert_id()
บนฐานข้อมูลมันจะส่งคืน id ที่แทรกล่าสุด
เช่น:
$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id
ในบรรทัดเดียว
echo $this->db->insert('mytable',$data)->insert_id();
คุณสามารถรับ ID ที่แทรกล่าสุดได้โดยใช้ฟังก์ชัน php ในตัว mysql_insert_id();
$id = mysql_insert_id();
คุณยังได้รับรหัสล่าสุดโดย
$id = last_insert_id();
ใช้งานmysql_insert_id()
ได้ แต่มีหมายเหตุเฉพาะเกี่ยวกับการใช้งานคุณต้องเรียกใช้หลังจากเรียกใช้แบบสอบถาม INSERT หมายถึงในเซสชันสคริปต์เดียวกัน หากคุณใช้อย่างอื่นมันจะทำงานไม่ถูกต้อง
สะอาดและเรียบง่าย -
$selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1";
$result = $mysqli->query($selectquery);
$row = $result->fetch_assoc();
echo $row['id'];
หมายเหตุ: หากคุณทำการแทรกหลายรายการด้วยคำสั่งเดียว mysqli :: insert_id จะไม่ถูกต้อง
โต๊ะ:
create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));
ตอนนี้ถ้าคุณทำ:
insert into xyz (name) values('one'),('two'),('three');
mysqli :: insert_id จะเป็น 1 ไม่ใช่ 3
เพื่อให้ได้ค่าที่ถูกต้องทำ:
mysqli::insert_id + mysqli::affected_rows) - 1
นี่เป็นเอกสาร แต่ค่อนข้างคลุมเครือ
ฉันชอบใช้ไวยากรณ์ MySQL บริสุทธิ์เพื่อรับรหัส auto_increment สุดท้ายของตารางที่ฉันต้องการ
php mysql_insert_id () และ mysql last_insert_id () ให้เฉพาะ ID ธุรกรรมล่าสุด
หากคุณต้องการ auto_incremented ID สุดท้ายของตารางใด ๆ ในสคีมาของคุณ (ไม่ใช่เฉพาะรายการสุดท้าย) คุณสามารถใช้คำค้นหานี้ได้
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME = 'my_table_name';
แค่นั้นแหละ.
เป็นเรื่องน่าเศร้าที่จะไม่เห็นคำตอบพร้อมตัวอย่าง
ใช้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
ใช้PDO :: lastInsertId :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID
การใช้MySQLi
การทำธุรกรรมบางครั้งผมก็ไม่สามารถที่จะได้รับmysqli::$insert_id
เพราะมันกลับ 0. เฉพาะอย่างยิ่งถ้าผมใช้วิธีการจัดเก็บที่ดำเนินINSERT
s ดังนั้นจึงมีอีกวิธีหนึ่งในการทำธุรกรรม:
<?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;
}
?>
ใช้mysqliเนื่องจากmysqlกำลังลดราคา
<?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();
?>
ฉันเหนื่อย
mysqli_insert_id($dbConnectionObj)
สิ่งนี้จะส่งคืน ID ที่แทรกล่าสุดของการเชื่อมต่อปัจจุบันดังนั้นหากคุณจัดการการเชื่อมต่ออย่างถูกต้องสิ่งนี้ควรใช้งานได้ ทำงานให้ฉันอย่างน้อย