การแก้ปัญหา mysql_insert_id() ไม่คืนค่า record ที่ insert อย่างถ
วิธีแรก ทำการ lock ตารางก่อนการ insert ครับ ป้องกันการ insert ซ้ำเพื่อให้ mysql ทำการจัดการคำสั่งแรกให้เสร็จก่อน แล้วถึงค่อยทำคำสั่งต่อไป วิธีนี้ควรทำการ lock ตารางตั้งแต่คำสั่งแรกจนสิ้นสุดกระบวนการแล้วค่อยปลดล๊อคนะครับ
<?php
mysql_query("LOCK TABLES tablename WRITE"); // lock
mysql_query("SET AUTOCOMMIT = 0");
mysql_query("INSERT INTO tablename (field1, field2) VALUES ('value1',value2)"); // คำสั่ง insert ข้อมูล
$insert_id = mysql_insert_id(); // id ที่ insert เข้าไป
mysql_query("COMMIT");
mysql_query("UNLOCK TABLES"); // unlock
?>
วิธีที่ 2 กำหนดคีย์ เพื่อใช้ในการตรวจสอบ โดยการสุ่มตัวอักษร แล้ว insert ไปพร้อมกันครับ หลังจากนั้นให้อ่าน id ที่ insert จากคีย์นี้ครับ
<?php
$key = rndname(32); // สร้างตัวอักษรสุ่ม
mysql_query("INSERT INTO tablename ('field1', 'field2', 'hash') VALUES ('value1','value2',$key)"); // เก็บตัวอักษรที่สุ่มลงไปพร้อมกับข้อมูลที่บันทึก
$result= mysql_query("SELECT id FROM tablename WHERE hash='$key' ORDER BY id DESC LIMIT 1"); // อ่าน id โดยค้นหาจาก key ที่เก็บไว้
$stuff = mysql_fetch_assoc($result);
$insert_id =$stuff[id]; // id ที่ insert เข้าไป
?>