2013-02-17 117 views
1

我正在使用PHP和MySQL(V5.1)的事件日曆工作,其中admin將添加一個事件,然後爲該事件提供一個出席列表也會被創建。我有三個表格:活動,出席和成員。到目前爲止,我可以使用通過PHP表單輸入的信息創建事件。我試圖通過從剛剛創建的事件中插入事件ID來更新考勤表,以及從成員表中拉入成員列表(使用成員ID)。儘管如此,沒有什麼會被添加到參加表格。有人能讓我知道我應該做什麼不同嗎?使用LAST_INSERT_ID()和另一個表中的行在PHP/MySQL中的兩個插入

一些我使用表中的字段:
活動:EVENT_ID(主鍵,自動遞增),名稱,位置,日期
考勤:attendance_ID(主鍵,自動遞增),EVENT_ID, member_ID,參加
成員:member_ID(主鍵,自動遞增),姓名,電子郵件

enter code here 

這裏是代碼:

mysql_query("SET AUTOCOMMIT=0"); 
mysql_query("START TRANSACTION"); 

$query1 = mysql_query("INSERT INTO events (name , location , date) VALUES ('".mysql_real_escape_string($name)."' , '".mysql_real_escape_string($location)."' , '".mysql_real_escape_string($date)."')"); 

$query2 = mysql_query("INSERT INTO attendance (event_ID , member_ID) SELECT LAST_INSERT_ID(), members.member_ID FROM members"); 

if ($query1 and $query2) { 
mysql_query("COMMIT"); 
} else { 
mysql_query("ROLLBACK"); 

}

回答

0

幾個重要的點。首先,如果您得到最後一個插入ID,則應首先執行LOCK和UNLOCK查詢:

  • 鎖定表events WRITE;
  • UNLOCK TABLES

其次,你可以使用mysqli_insert_id()方法來獲得最後插入的ID。這意味着您必須在要插入的表中具有AUTO_INCREMENT字段。

+0

謝謝大家。事實證明,我的代碼不工作的原因實際上完全在文件的不同部分(只是一個提示,如果你要創建一個頁面的副本來測試其他代碼,總是記得更新你的表單動作。哎呀)。爲了記錄,所有的建議將按照預期填充表格,就像我的原始代碼一樣。 &DSJ建議使用MySQLi並鎖定表格似乎是比我使用的更好的做法,所以我就這樣做了。 – 2013-02-18 12:31:10

1

你可以使用mysql_insert_id()

$query1 = mysql_query("INSERT INTO events (name , location , date) VALUES ('".mysql_real_escape_string($name)."' , '".mysql_real_escape_string($location)."' , '".mysql_real_escape_string($date)."')"); 

$insert_id = mysql_insert_id() ; 

$query2 = mysql_query("INSERT INTO attendance (event_ID , member_ID) SELECT {$insert_id}, members.member_ID FROM members") ; 
0

VALUES$query2形成正確的SQL語句:

$query2 = mysql_query("INSERT INTO attendance (event_ID , member_ID) **VALUES (**SELECT LAST_INSERT_ID(), members.member_ID FROM members"); 
+0

你怎麼說[那](http://stackoverflow.com/questions/25969/sql-insert-into-values-select-from)? – vikingmaster 2013-02-17 18:46:54

+0

@ jari哦,有趣;-) – michi 2013-02-17 18:50:53

相關問題