2014-12-01 116 views
-2

我對INSERT INTO查詢有問題 在註冊表單中,當用戶輸入用戶名並選擇部門/中心作爲助理時,我想將該用戶名插入到表助理中。使用WHERE子句插入INTO查詢

我試過的是;

$query14 = "INSERT INTO bursary (UserName) VALUES     
('$UserName') WHERE DepartCent='Bursary'"; 
$result14=mysql_query($query14); 

我的表名是助學金,它看起來像;

UserID  UserName 

    1  (  ) <---- I want only UserName that choose department/center as bursary 

請有人幫我解決這個,明白這一點。

+2

** WARNING **:這是因爲這些參數可怕,不安全沒有[妥善逃脫](http:// bobby-tables的.com/PHP)。您應該**絕不**將'$ _POST'數據直接放入查詢中:它會創建一個巨大的[SQL注入漏洞](http://bobby-tables.com/)。 'mysql_query'是一個過時的接口,不應該被使用,它將被從PHP中刪除。像[PDO這樣的現代化替代品並不難學](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)。像[PHP The Right Way](http://www.phptherightway.com/)這樣的指南解釋了最佳實踐。 – tadman 2014-12-01 19:43:26

+3

你確定要使用插入而不更新嗎? – CBredlow 2014-12-01 19:43:35

+2

'INSERT'語句沒有'WHERE'子句,因爲根據定義,它只用於添加新行,而不是修改現有行。你正在尋找'UPDATE bursary SET Username ='$ UserName'WHERE DepartCent ='Bursary'' – 2014-12-01 19:44:38

回答

0

您可以:

  • 插入到數據庫表中的新行
  • 更新數據庫表中的現有行

只有當你試圖更改現有行的值,做它有意義的是指定一個WHERE子句讓數據庫知道你想改變哪些值。 編輯:你能再次解釋它到底是什麼,你正試圖實現?你想只插入一些用戶填寫表單嗎?即那些選擇助學金的部門? 爲什麼你不改變你的表結構是這樣的: 表DEPARTMENT: 部門名稱,部門ID

表USER: 用戶名,部門ID(外鍵部)

編輯NR。 2:要做到這一點的方法是規範化你的表結構。假設發生以下某種情況:

  • 您想稍後添加其他部門 - 您不希望每次都創建一個新表。
  • 你想改變一個部門的名字 - 你想重命名你的表嗎?改變你的代碼,...我懷疑

所以要走的路是設計你的表,以他們分開你的程序中的不同「東西」的方式。您正在使用的一種類型是部門(助理,...)另一種類型的用戶。作爲一個粗略的起點,嘗試爲每個表創建一個表並嘗試使用所謂的外鍵連接這些表。閱讀這樣的:

  • 每個部門都有一個唯一的部門ID
  • 每一位用戶通過該用戶部門-ID

您可以再後來就加盟這些表中查找相關的部門...

從用戶選擇u.userName,d.departmentName u INNER JOIN部門d ON u.departmentId = d。DepartmentID的

這將顯示您的所有用戶的姓名及其相關DEPARTMENTNAME

+0

實際上有很多部門和中心,我想根據他們的部門分開用戶名 – satish 2014-12-01 19:54:01

0

INSERT查詢暗示將數據不存在的話。如果要插入從查詢派生的值,則需要使用實際查詢來獲取它。 WHERE子句失敗,因爲在插入一行之前沒有要檢查的行。

有真的沒有足夠的信息來找出你想要做什麼,但如果我們只是去對你的問題的這部分:

「我想只有選擇部門/中心作爲助學金用戶名」

那麼你很可能尋找一個INSERT..SELECT(假設您已經將數據已經插入到其他一些用戶表「your_user_table」)

INSERT INTO bursary(UserName) 
SELECT UserName from your_user_table 
WHERE DepartCent='Bursary'; 
+0

它的工作,但問題是,每次註冊完成後,用戶名是創建重複的用戶名whi ch已經在助學金錶 – satish 2014-12-01 20:07:32

+0

這是因爲您每次執行語句時只需在助學表中創建新行。你需要考慮什麼時候你想INSERT的發生和控制你的程序 – markus 2014-12-01 20:10:48

+0

我不主張這是一個工作查詢,只是最初填充表(抱歉,如果我誤解了)。 – 2014-12-05 17:15:16