2

我有一个简单的查询,我试图将其转换为插入...在重复键等上,我遵循了 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)"  
4

2 回答 2

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 INTO foo (id, desc) VALUES(1, 'testing')
ON DUPLICATE KEY UPDATE
desc = 'some other string that is not testing';

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

于 2012-09-12T21:47:06.227 回答
0

使用 REPLACE 而不是 INSERT

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

于 2012-09-12T21:51:56.677 回答