2010-07-12 42 views
1

通过下面的查询,我试图用值NEW_VALUE覆盖MySQL表中名为“login”的第10个字段。它不工作。代码是否正确覆盖MySQL表中现有数据的方法?覆盖MySQL表中的数据

由于提前,

约翰

INSERT INTO login VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'NEW_VALUE', NULL, NULL, NULL) 
+1

否,代码不会有什么做用PHP。你需要学习SQL(或者可能是MySQL)。至少,你应该寻找一个涵盖SQL基础知识的教程。 – aib 2010-07-12 13:05:15

+0

** INSERT **与** UPDATE **不同。插入添加NEW记录,而UPDATE正在编辑EXISTING记录(s)。 – LoudSpeaker 2017-06-01 03:03:59

回答

2

没有你的代码是不正确的。您正在向表中添加新行而不更新现有值。要更新现有的值,你要使用的更新语句:

Upate特定记录

mysql_query("Update login SET nameOfYourColumn = '$cleanURL' WHERE primaryKey = idOfRowToUpdate") 

更新整个表

mysql_query("Update login SET nameOfYourColumn = '$cleanURL'") 
+0

可能需要引用变量,但是这个。 – 2010-07-12 13:02:26

+0

添加了它们,谢谢指出缺少的引号。 – Tommy 2010-07-12 13:05:55

+0

谢谢......这看起来很有希望......但现在它只是把一个空白/空项入场。任何想法为什么会发生? – John 2010-07-12 14:33:10

1

第一关:INSERT增加了一个新的记录到表,UPDATE更新(覆盖)一个或多个现有记录。

二:更新需要知道列的名称进行更新,并更新

UPDATE <tableName> 
    SET <columnName> = '$cleanurl' 
WHERE <some condition to identify which record should be updated> 

第三哪些行:它可能是值得你阅读的MySQL/SQL几个基本教程

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 login;”那么你可能会遇到麻烦。这被称为SQL注入,并且是不断的安全问题的根源。没有太多细节,你应该学习如何使用预先准备的语句。

第3点:PHP带有一个名为PDO的库,它支持预准备语句。它还提供了一个用于与数据库进行交互的通用API,因此如果您发现需要从Mysql迁移到另一个DBMS,则PDO将抽象出大部分差异。通过使用mysql_query函数,你可以使用mysql来锁定自己。

您不必同时解决所有这些问题,但是不要忘记它们,一旦您熟悉PHP和SQL,就可以回到关于PDO和准备语句的观点。

5

就像一个添加,如果任何人仍然在寻找一个实际的覆盖,而不仅仅是一个更新。如果你想OVERWRITE总是(不更新,只是覆盖),你可以使用REPLACE而不是INSERT

REPLACE与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。参见第13.2.5节,“INSERT语法”

http://dev.mysql.com/doc/refman/5.5/en/replace.html