我有一个简单的查询,我试图转换为插入...复制键等...我遵循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)"
答案 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将旧行值替换为给定值