דיי פשוט
הפונקציה הזו אכן מקבלת את ה-ID של הפעולה האחרונה אבל, של הפעולה שהרגע ביצעת, ככה שאם אתה לא עורך שאילתה נוספת אתה מקבל את התוצאה של שאילתת ה- INSERT האחרונה שקיבלת. הפונקציה הזו לא עורכת שאילתה נוספת לתוך ה- MYSQL אלא מסתמכת על הפויינטר שאתה נותן לה RESULT$, והפויינטר הזה מצביע על הבלוק בזיכרון שמכיל את התשובה שאתה קיבלת בשאילתת ה- INSERT האחרונה שאתה ביצעת. ככה יוצא שאם יש הרבה משתמשים וכל אחד בזמנו שלו ביצע פעולת INSERT, כל אחד מהם רואה את ה- ID האחרון אבל לא בהכרח האחרון במציאות אלא האחרון שהיה כשהם ביצעו את ה- INSERT שלהם (משמע הם רואים את ה-ID של הפעולה שהם ביצעו). אין קשר לנעילת טבלאות במובן הזה. נעילת הטבלאות מתבצעת בדיוק בשביל למנוע מצב שבו שני משתמשים מבצעים INSERT בדיוק באותו הרגע והנתונים של שניהם יתערבבו ביחד - דבר זה לא קורה משום שהטבלאות ננעלות. עכשיו אחרי ההסבר הטכני בוא נלך להסבר על פני לוח זמנים: 1. משתמש א´ ומשתמש ב´ שולחים שאילתת INSERT. 2. שתי השאילתות מגיעות ל- MYSQL. 3. השאילתה הראשונה מבצעת פעולת INSERT, והטבלה ננעלת. השאילתה מקבלת הקצאה של BLOCK (בלוק) זיכרון על פי גודל תשובת ה- MYSQL ששם יאוכסנו הנתונים. בכללם גם משתנה אחד שנקרא INSERT_ID, שאומר בדיוק מה ה- ID שקיבלו הנתונים שהוכנסו. שים לב, הנתון הזה נמצא בבלוק התשובה של השאילתה של משתמש א´. 4. התשובה עוברת למשתמש א´, ובמקביל הטבלה נפתחת והשאילתה של משתמש ב´ נכנסת לפעולה. 5. אותו הדבר קורה כמו ב- 3, אלא שמשתמש ב´ מקבל הקצאה של בלוק זיכרון שונה וגם התשובה של INSERT_ID שונה בעקבות הID של פעולת ה-INSERT שמתשמש ב´ הרגע ביצע. 6. השאילתה של משתמש ב´ מסתיימת הקצאות הזיכרון הסתיימו והטבלה נפתחת. עכשיו התשובה שמשתמש א´ יקבל תהיה שונה מהתשובה שמשתמש ב´ יקבל משום שכל אחד בכמה אלפיות השניה שלקח לMYSQL לנעול, לכתוב, להקצות, ולפתוח את הטבלה, היתה פעולת ה- INSERT האחרונה. כאשר אתה שואל מהו ה- ID האחרון של פעולת ה- INSERT אצל משתמש א´ הוא יקבל את התשובה שלו ולא את התשובה של משתמש ב´ משום שהוא (כשהתבצעה הקצאת הזיכרון וכל הנתונים) עוד לא ידע על השאילתה של משתמש ב´. כמו שאמרתי קודם, אם אתה רוצה לדעת מהיא הרשומה האחרונה בתוך מאגר הנתונים שלך, תיצור שאילתה שתעשה בדיוק את זה ואל תסתמך לשם כך על INSERT_ID. בסביבה של מתשמש אחד היא אמנם תעבוד מצויין ותעשה בדיוק את מה שאתה מצפה שהיא תעשה אבל בסביבה רבת משתמשים אשר יעבדו בסמיכות זמנים מאוד גדולה (בהפרשים מאוד קטנים) היא תעשה בדיוק את מה שהיא צריכה לעשות ולא את מה שאתה רוצה שהיא תעשה. מקווה שפיזרתי קצת ערפילים. שנאור.