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));
我有一个 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));