如果有人问过我很抱歉,但我找不到任何可以帮助我的事情。我试图在我的表中切换两个主键的值,因为1变为2,2变为1。 我收到此错误 SQLSTATE [23000]:完整性约束违规:1062重复条目' 2'对于关键' PRIMARY
我对mysql不太熟悉。你会如何解决这个问题
<?php
//Connect to the DB
require_once('connect.php');
//insert names into the DB
$MoveToTwo = '2';
$MoveToOne = '1';
try{
global $db;
$inserts = $db->prepare("UPDATE slider_images SET id=:MoveToOne WHERE id=:MoveToTwo");
$inserts = $db->prepare("UPDATE slider_images SET id=:MoveToTwo WHERE id=:MoveToOne");
$inserts->bindParam(':MoveToOne', $MoveToOne);
$inserts->bindParam(':MoveToTwo', $MoveToTwo);
$inserts->execute();
}
catch(Exception $e){
echo $e->getMessage();
exit;
}
?>
答案 0 :(得分:0)
如果我理解你的问题,你可以按行排序。
在mysql中操作一个id是一个坏主意,因为它是你行的mysql标识符并自动生成。
更好的解决方案是添加一个名为ordered的新列(不要使用order,因为保留了Mysql密钥)。然后,您可以更轻松地更新此值而不会发生冲突,并在您的选择查询中添加ORDER BY ordered ASC
以获得与之前相同的效果。
要完成保存,您需要在行创建时添加值。为此,在保存参赛作品之前,你会指望你的行号。
答案 1 :(得分:0)
表格的id
列设置为主键,必须唯一,因此无法更新为现有值。唯一的选择是删除行并使用新值重新插入。
但是您的代码存在问题,您准备两次,第二次覆盖您的第一次准备。其次,准备好的陈述的重点是你可以重新绑定值。
$dstmt = $db->prepare("DELETE FROM slider_images WHERE id = ?");
$sstmt = $db->prepare("SELECT cola, colb, colc, etc FROM slider_images WHERE id = ?");
$istmt = $db->prepare("INSERT INTO slider_images (id, colb, colc, etc) VALUES (?,?,?,?)");
$result_a = $sstmt->execute([$MoveToOne]);
$result_b = $sstmt->execute([$MoveToTwo]);
$row_a = $result_a->fetch();
$row_b = $result_b->fetch();
$dstmt->execute([$MoveToTwo]);
$dstmt->execute([$MoveToOne]);
$istmt->execute([$MoveToOne, $row_b['colb'], $row_b['colc'], $row_b['etc']]);
$istmt->execute([$MoveToTwo, $row_a['colb'], $row_a['colc'], $row_a['etc']]);
它像这样短得多,基本上也一样,但如果你确定id不存在,你可以使用update语句。