שאלה בmysql & php

T w i S t e R

New member
שאלה בmysql & php

אני עובד עם מסד נתונים מסוג mysql ומתכנת בשפה php. יש לי טבלה עם שדה id מסוג auto_increasment, ומתי שאני מוסיף שורה לטבלה, אני לא מציין את האיידי, הוא אוטומטי... אבל יש לי טבלה שמקושרת לפי האיידי, ואני צריך אותו, איך אני יודע את האיידי שהוספתי? אי אפשר לספור שורות כי באמצע מוחקים שורות והספירה ממשיכה. ידוע לי על הפקודות: mysql_insert_id() ו: last_insert_id() אני לא יודע לממש אותן. מי שיוכל לעזור ולתת דוגמא לפיתרון אני יודה לו מאוד
 

behemot

New member
דוגמא

$theSQL = "INSERT INTO Books(bookID, bookName) "; $theSQL .= "VALUES(NULL, '".$bookName."');"; $rs = mysql_query($theSQL); //get the id $rs = mysql_query("SELECT LAST_INSERT_ID() as id"); if ($row=mysql_fetch_array($rs)) { $bookID = $row["id"]; }​
 

shanor

New member
מממ...

אם אני אמשיך את הדוגמה של BEHEMOT (אחלה שם - אם יורשה לי לציין) כמו שנאמר כבר בשאלה המקורית, אפשר להשתמש ב-mysql_insert_id. ההבדל הוא שעל פי מה ש- BEHEMOT מציע, אתה צריך לשאול את מאגר הנתונים שלך עוד שאילתה ובמערכות גדולות וכבדות עוד שאילתה מקבלת משקל מבחינת זמן תגובה ועומס על שרת הנתונים שלך. לעומת זאת mysql_insert_id, כבר נמצאת בזיכרון של השרת ולא צריך לשאול עוד שאילתה אחרי הINSERT. אז למה צריך את שתי האפשרויות.... ממממ... אז ככה, כאשר הנתון שלך שגודל כל פעם מוגדר כ- INTEGER, אז אין בעיה, הכל טוב ותשמתש ב-mysql_insert_id כאשר השימוש הוא כזה:
$somevar=mysql_insert_id(resource link_identifier);​
כאשר resource link_identifier הוא שם הפוינטר שקיבלת כאשר פתחת את הקישור למאגר הנתונים שלך. עכשיו, אם הנתון שלך הוא BIGINT... אז ממש לא כדאי להשתמש בפונקציה הזו, אלא לעבוד באמת על פי השיטה של BEHEMOT ולשאול מהו הנתון האחרון שהוכנס. זהו בגדול. בהצלחה שנאור.
 
למעלה