2014-12-01 89 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