【问题标题】:How to update row in PHP/mysql?如何更新 PHP/mysql 中的行?
【发布时间】:2014-09-23 16:32:06
【问题描述】:

我将 Outlook 联系人文件导入我的数据库,然后将其显示到 html 表中。表已创建,一切正常,但当我再次尝试上传时,所有名称和信息都翻了一番。所以我想做的是如果名字和姓氏已经存在只是为了更新该行和该行中的所有单元格,而不是一遍又一遍地插入该行。

"CREATE TABLE contacts(PID INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(PID),first_name CHAR(80),middle_name CHAR(80),last_name CHAR(80)"

我尝试过重复密钥更新/替换,但没有成功。

"INSERT INTO contacts (first_name,middle_name,last_name)
VALUES ('$first_name','$middle_name','$last_name')"

我猜我的问题出在 auto_increment 和主键上,但我真的不明白它们是如何工作的以及如何做到这一点。

【问题讨论】:

  • 所以。使(名字,姓氏)成为键
  • 就这样吗?主键(名字,姓氏)?
  • 它不需要是PRIMARY。独一无二。
  • 我相信你的问题在这里得到了回答:[如果存在,我如何更新,否则插入?][1] [1]:stackoverflow.com/questions/1218905/…
  • 您在使用此解决方案时会遇到问题 - 我们的通讯录中有不止一个 Richard Jones。

标签: php html mysql sql


【解决方案1】:

您的INSERT 永远不会“更新”您现有的记录,因为您缺少“重复键”业务:

INSERT INTO sometable (field1, field2) 
ON DUPLICATE KEY UDPATE field1=VALUES(field1), field2=VALUES(field2)

当然,这只有在 INSERT 确实会导致重复键违规时才有效。您的表中唯一的唯一索引是主键,并且您根本没有向其中插入值,因此永远不会出现重复键违规。

您可能想要一个 UPDATE 查询代替:

UPDATE yourtable
SET field1='value for field1', field2='value for field2'
WHERE id=$your_record_id

【讨论】:

  • 好的,但我怎么知道它是唯一索引?如何将名字和姓氏设置为唯一索引?
【解决方案2】:

您可以在HTML中添加一个带有PID的隐藏字段,当您上传到mySQL时,您可以添加一个存储过程来检查它是否存在。如果存在,更新,如果不存在,插入。

*如果是新用户,隐藏字段中的PID可以是= -1

可能想看看这个:Check if record exists, if yes "update" if not "insert"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 2012-05-03
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多