MySql - 在重复键上

MySql - On Duplicate Key

我有一个 table:

Saves
-----
UserId (int primary key)
Save (blob)
SaveBackup (blob)

这里填充了这个:

Saves(22, 'xyz', '')

我提交以下内容:

$stmt = $db->prepare("INSERT INTO Saves (UserId, Save, SaveBackup) "
                        . "VALUES (:UserId1, :Save1, '') ON DUPLICATE KEY "
                        . "UPDATE Saves SET SaveBackup=Save, Save=:Save2 "
                        . "WHERE UserId=:UserId2");
$stmt->execute(array(':Save1' => 'zzz',
                ':Save2' => 'zzz',
                ':UserId1' => 22,
                ':UserId2' => 22));

它不起作用,您的 SQL 代码中有错误。它工作正常,没有所有的东西在(和包括)ON DUPLICATE KEY 之前。

您不能在 INSERT 中使用 WHERE。这是没有意义的,因为 INSERT 的目的是添加新行,而不是修改现有行。当您使用 ON DUPLICATE KEY 时,它会根据您要插入的密钥的重复项来确定您要更新的行,因此您无需明确告诉它。

您也不需要为新值使用两个占位符。在 ON DUPLICATE KEY 子句中,您可以使用 VALUES(Save) 表示如果要添加新行,本应插入到 Save 列中的值。

$stmt = $db->prepare("INSERT INTO Saves (UserId, Save, SaveBackup) "
                        . "VALUES (:UserId, :Save, '') ON DUPLICATE KEY "
                        . "UPDATE SaveBackup=Save, Save = VALUES(Save) ");
$stmt->execute(array(':Save' => 'zzz',
                     ':UserId' => 22));