เก็บข้อมูล ยังไงในคราวเดียวกัน INSERT เข้าทั้ง 2 table แต่อีก ใน 2 table ต้องอ้างอิง จากไอดี AUTO_INCREMENT
วิธีที่จะให้นี้ ผมไม่แนะนำให้ใช้เท่าไหร่น่ะครับ แต่ก็เอาเป็นว่ามันตอบคำถามได้ก็แล้วกันน่ะ
Code (PHP)
$result=mysql_query("insert into table2(cus_name, cus_surname)values('$cus_name','$cus_surname')");
if($result)(
mysql_query("insert into table1(room_id, cus_id, room_name)values('$room_id',select max(cus_id) from table1),'$room_name')");
)
ประวัติการแก้ไข 2013-08-26 23:04:40
Date :
2013-08-26 22:25:55
By :
mangkunzo
ใช้ LAST_INSERT_ID() นั่นล่ะครับ ไม่มีโอกาสผิดพลาดหรอกครับ ที่คุณได้ยินมาเป็นข้อมูลที่ผิดครับ
LAST_INSERT_ID() จะเอา ID ของ connection ปัจจุบันเท่านั้น ไม่เกี่ยวกับ connection อื่น
ต่อให้มีผู้ใช้ INSERT พร้อมกันล้าน connection
LAST_INSERT_ID() ก็จะคืนแถวล่าสุดของ connection ปัจจุบันเท่านั้น
อ้างอิงจากที่นี่เลยครับ จะได้มั่นใจ
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client. This value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that each client can retrieve its own ID without concern for the activity of other clients, and without the need for locks or transactions.
Date :
2013-08-26 22:51:25
By :
phpinfo()
ขอขอบคุณ คุณ mangkunzo และคุณ phpinfo()
นิดนึงนะครับ ฟังชั้น LAST_INSERT_ID() ผมไม่ได้ไปฟังคนอื่นหรอกครับ ผมประสบปัญหาด้วยตัวเอง อาจเป็น เพราะว่าผม เขียนไม่ถูกหลักการหรือ เปล่า เลยทำให้ เกิดการผิดพลาด ขึ้น ถ้ามีคนยืนยัน ว่ามันไม่มีทางผิดพลาด ได้ 100% ผมจะได้หาวิธีใช้ให้มันถูกต้องและ แก้ใขต่อไป
ขอขอบคุณมา ณ ที่นี้ด้วยนะครับ
Date :
2013-08-26 23:07:25
By :
yamcrocodile
สำเร็จแล้วครับ วิธีการใช้ของผมเอามาแบ่งปันกันครับ ไม่รู้ว่าถูกต้อง หรือเปล่า แต่มันสามารถใช้ได้
Code (PHP)
<?php
mysql_query("INSERT INTO table1 VALUES ('','$name','$surname')");
$last_id = mysql_query("SELECT LAST_INSERT_ID()");
$result = mysql_fetch_assoc($last_id);
$last = $result['LAST_INSERT_ID()'];
mysql_query("INSERT INTO table2 VALUES ('','$last','$room_id')");
?>
ประวัติการแก้ไข 2013-08-27 01:37:30
Date :
2013-08-27 01:33:57
By :
yamcrocodile
MySQL ฉลาดพอที่จะเลือก Connection กับ LAST_INSERT_ID() ของ Client ที่ Request ครับ
Date :
2013-08-27 06:09:37
By :
mr.win
อันนี้ผมเดานะ จริงๆ ที่บอกว่าเคยประสบปัญหาเนี่ย อาจจะเป็นเพราะใช้ mysql_insert_id() ก็ได้มั้งครับ (ถ้าคุณเคยใช้)
เพราะฟังก์ชั่นกลุ่ม mysql_xxxxx() หรือที่เรียกว่า libmysql เนี่ย มันเก่ามากๆ และไม่มีการอัพเดทมานานแล้ว อาจจะมีบั๊กอยู่
ซึ่งการทำงานของ mysql_insert_id() มันอาจจะไม่เป็นแบบ LAST_INSERT_ID() ก็เป็นได้
ถ้าเป็นไปได้อยากให้เปลี่ยนมาใช้ mysqli ครับ
ถ้าสนใจลองอ่านบทความของผมดูนะครับ อาจจะพอช่วยให้เริ่มต้นกับ mysqli ได้
Date :
2013-08-27 07:47:37
By :
phpinfo()
เพื่อความแน่ใจผมเลยลองทดสอบดูครับ
โดยลอง INSERT เข้าในตารางที่มีคอลัมน์เดียวเป็น int ชนิด PRIMARY และ AUTO_INCREMENT
โดย INSERT และหน่วงเวลาไว้ 5 วิ และระหว่างนั้นก็รันอีก connection หนึ่ง
Code (PHP)
<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('testdb');
mysql_query("INSERT INTO `ids` VALUES ()");
sleep(5);
echo mysql_insert_id();
ก็ได้ผลปกตินะครับ connection ทั้งสองก็แสดง mysql_insert_id() เป็นค่าของ connection นั้นๆ
สรุปว่า mysql_insert_id() ทำงานเหมือน LAST_INSERT_ID() ครับ ไม่ได้แตกต่างกันอย่างใด
Date :
2013-08-27 08:20:24
By :
phpinfo()
Load balance : Server 02