通过下面的查询,我试图覆盖名为“login”的MySQL表中的第10个字段,其值为NEW_VALUE
。它不起作用。下面的代码是否是覆盖MySQL表中现有数据的正确方法?
提前致谢,
约翰
INSERT INTO login VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'NEW_VALUE', NULL, NULL, NULL)
答案 0 :(得分:6)
如果有人还在寻找实际的覆盖而不仅仅是更新,那么就像添加一样。如果您想要 OVERWRITE ,(不更新,只是覆盖),您可以使用REPLACE
代替INSERT
。
REPLACE的工作方式与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。请参见第13.2.5节“INSERT语法”
答案 1 :(得分:2)
没有你的代码不正确。您正在向表中添加新行而不更新现有值。要更新现有值,您需要使用更新语句:
更新特定记录
mysql_query("Update login SET nameOfYourColumn = '$cleanURL' WHERE primaryKey = idOfRowToUpdate")
更新整个表格
mysql_query("Update login SET nameOfYourColumn = '$cleanURL'")
答案 2 :(得分:2)
如果我理解了你的问题,那么答案就是“不”。这也不是特定于mysql的问题,它是一个通用的SQL问题。我强烈建议您阅读SQL教程,这是我知道的最好的教程:
http://philip.greenspun.com/sql/
要回答您的问题,您应该可以:
mysql_query("UPDATE login SET foo = '$cleanurl'");
其中“foo”是第十个字段的名称。
其他一些评论:
首先,不要依赖字段的位置,始终明确列出字段名称。例如,最好去
INSERT INTO login (id, name) VALUES (1, 'Fred')
而不是
INSERT INTO login VALUES (1, 'Fred')
第2点:您已将$ cleanurl的值直接嵌入到查询中。当然,你必须一次学习一件事,但要注意这是非常危险的。如果$ cleanurl包含类似“')的内容; DROP TABLE登录;”那么你可能遇到麻烦了。这称为SQL注入,是持续安全问题的根源。不需要太多细节,您应该学习如何使用预准备语句。
第3点:PHP附带了一个名为PDO的库,它支持预处理语句。它还提供了一个与数据库交互的通用API,因此如果您发现需要从Mysql移动到另一个DBMS,PDO将抽象出大多数差异。通过使用mysql_query函数,您可以锁定自己使用mysql。
您不必同时解决所有这些问题,但也不要忘记它们,一旦熟悉PHP和SQL,就会回到关于PDO和准备语句的问题。
答案 3 :(得分:1)
首先:INSERT向表中添加新记录,UPDATE更新(覆盖)一个或多个现有记录。
第二:UPDATE需要知道要更新的列的名称以及要更新的行
UPDATE <tableName>
SET <columnName> = '$cleanurl'
WHERE <some condition to identify which record should be updated>
第三:在阅读MySQL / SQL的几个基本教程
时,这可能是值得的