首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖MySQL表中的数据

覆盖MySQL表中的数据
EN

Stack Overflow用户
提问于 2010-07-12 20:58:58
回答 4查看 19.1K关注 0票数 1

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

提前谢谢你,

约翰

代码语言:javascript
复制
INSERT INTO login VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'NEW_VALUE', NULL, NULL, NULL)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-12 21:00:52

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

更新特定记录

代码语言:javascript
复制
mysql_query("Update login SET nameOfYourColumn = '$cleanURL' WHERE primaryKey = idOfRowToUpdate")

更新整个表

代码语言:javascript
复制
mysql_query("Update login SET nameOfYourColumn = '$cleanURL'")
票数 2
EN

Stack Overflow用户

发布于 2013-01-03 19:16:40

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

REPLACE的工作方式与INSERT完全相同,不同之处在于,如果表中的旧行与主键或唯一索引的新行具有相同的值,则会在插入新行之前删除旧行。请参阅第13.2.5节“插入语法”

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

票数 7
EN

Stack Overflow用户

发布于 2010-07-12 21:12:57

如果我理解了你的问题,那么答案是“不”。这也不是mysql特有的问题,这是一个通用的SQL问题。我强烈推荐阅读SQL教程,我所知道的最好的教程在这里:

http://philip.greenspun.com/sql/

要回答您的问题,您应该能够做到:

代码语言:javascript
复制
mysql_query("UPDATE login SET foo = '$cleanurl'");

其中"foo“是第十个字段的名称。

不过,还有一些其他的评论:

首先,不要依赖于字段的位置,总是明确地列出字段名称。例如,最好的方法是

代码语言:javascript
复制
INSERT INTO login (id, name) VALUES (1, 'Fred') 

而不是

代码语言:javascript
复制
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和预准备语句的要点上来。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3228714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档