MySQL Insert Into on Duplicate Key查询未更新

时间:2012-09-12 21:33:55

标签: mysql

我有一个简单的查询,我试图转换为插入...复制键等...我遵循mysql指南但由于某种原因它不更新我的文本。然而,它确实成功地创建了新行。任何帮助将不胜感激。查询的目的是添加和更新少量文本。

$sql = "INSERT INTO fetss.ocs_extended(ocsID, internalNOTE)
            VALUES('" .(int)$_POST['id'] ."', '". $db- >quote($_POST['note_desc']) ."')
            ON DUPLICATE KEY UPDATE internalNOTE = VALUES('". $db->quote($_POST['note_desc']) ."')";

更简单:

$sql = "INSERT INTO database.tablename(ID, Description)
VALUES(ID, Description) on Duplicate Key Update Description = VALUES(Description)"  

2 个答案:

答案 0 :(得分:0)

尝试:

$sql = sprintf("INSERT INTO fetss.ocs_extended(`ocsID`, `internalNOTE`)
                VALUES(%d, '%s')
                ON DUPLICATE KEY UPDATE
                `internalNOTE` = VALUES(`internalNOTE`)",
                (int)$_POST['id'],
                $db->quote($_POST['note_desc']));

我使用sprintf使SQL更容易阅读,但由于您想使用查询中的值更新描述,因此您不必指定值,只需告诉它使用通过指定列名来从insert语句中获取值。

如果你想将它更新为某个任意字符串,你可以这样做:

INSERT INTO foo (id, desc) VALUES(1, 'testing')
ON DUPLICATE KEY UPDATE
desc = 'some other string that is not testing';

不同之处在于您不使用VALUES函数,这是初始查询的问题所在。

答案 1 :(得分:0)

使用REPLACE而不是INSERT

当您使用Replace时,如果已存在具有重复键的行,则MySQL将旧行值替换为给定值