所以昨天我遇到了这个错误,我似乎无法解决这个错误。下面的代码段应该在递归的MariaDB表交换位置中发布两个帖子。
$cid
是应该切换位置,向上或向下的帖子的ID。
$pid
是父ID。
$ord
是帖子在父母下面的位置。
$dir
是帖子应向哪个方向移动,向上或向下移动。
然后第一个帖子应该移动到的位置的帖子是第一个帖子的初始位置。
<?php
$cid = isset($_GET['cid']) ? $_GET['cid'] : "";
$pid = isset($_GET['pid']) ? $_GET['pid'] : "";
$ord = isset($_GET['ord']) ? $_GET['ord'] : "";
$dir = isset($_GET['dir']) ? $_GET['dir'] : "";
if($cid == "" || $pid == "" || $ord == "" || $dir == "") die('nu gick det åt pipsvängen...');
if($dir == "up") {
$opos = $ord--;
} elseif($dir == "down") {
$opos = $ord++;
} else {
die('ingen riktning');
};
$ostmt = $dbh -> prepare("UPDATE csa_categories SET ordning = :onp WHERE foralder = :pid AND ordning = :oop");
$ostmt -> bindValue(":onp", $ord);
$ostmt -> bindValue(":pid", $pid);
$ostmt -> bindValue(":oop", $opos);
$ostmt -> execute();
$cstmt = $dbh -> prepare("UPDATE csa_categories SET ordning = :cnp WHERE id = :cid");
$cstmt -> bindValue(":cnp", $opos);
$cstmt -> bindValue(":cid", $cid);
$cstmt -> execute();
?>
这绝对没有。我没有改变表格中的任何内容,也没有任何错误。
答案 0 :(得分:0)
您是否尝试过使用其中任何一种方法?
$ostmt = $dbh -> prepare("UPDATE csa_categories SET ordning = :onp WHERE foralder = :pid AND ordning = :oop");
$ostmt -> bindParam(":onp", $ord);
$ostmt -> bindParam(":pid", $pid);
$ostmt -> bindParam(":oop", $opos);
$ostmt -> execute();
或
$ostmt = $dbh -> prepare("UPDATE csa_categories SET ordning = :onp WHERE foralder = :pid AND ordning = :oop");
$ostmt -> execute(array(':onp'=>$ord,':'pid'=>$pid,':oop'=>$opos));
此外,此语句是否产生任何输出:
$ostmt = $dbh -> prepare("SELECT ordning FROM csa_categories WHERE foralder = :pid AND ordning = :oop");
$ostmt -> bindParam(":pid", $pid);
$ostmt -> bindParam(":oop", $opos);
$ostmt -> execute();
答案 1 :(得分:0)
所以今天我终于成功了!我看着整件事都错了。脚本中没有任何缺陷,除了可能是我没有评论它的事实。今天我开始评论所有内容,并给我的变量更好的名字,事实证明,我一直在想错。更新查询有效,但是他们更新了错误的行,因此似乎没有发生任何事情。
以下是最终解决方案:
<?php
$absid = isset($_GET['cid']) ? $_GET['cid'] : ""; // ID of absolute row
$parid = isset($_GET['pid']) ? $_GET['pid'] : ""; // Absolute row's parent ID
$abspos = isset($_GET['ord']) ? $_GET['ord'] : ""; // Current position of absolute row
$newrelpos = $abspos; // New position of relative row
$dir = isset($_GET['dir']) ? $_GET['dir'] : ""; // Direction to move absolute row
if($absid == "" || $parid == "" || $abspos == "" || $dir == "") die('missing variable(s)');
// Generate absolute row's new position
if($dir == "up") {
$newabspos = $abspos - 1;
} elseif($dir == "down") {
$newabspos = $abspos + 1;
} else {
die('direction not set');
};
$relpos = $newabspos; // Current position of relative row
// Fetch relative row's ID
$stmt = $dbh -> prepare("SELECT id FROM csa_categories WHERE foralder = :parid AND ordning = :pos");
$stmt -> bindValue(":parid", $parid);
$stmt -> bindValue(":pos", $relpos);
$stmt -> execute();
$row = $stmt -> fetch();
$relid = $row['id']; // Relative row's ID
// Update absolute row
$astmt = $dbh -> prepare("UPDATE csa_categories SET ordning = :newabspos WHERE id = :absid");
$astmt -> bindValue(":newabspos", $newabspos);
$astmt -> bindValue(":absid", $absid);
$astmt -> execute();
// Update relative row
$rstmt = $dbh -> prepare("UPDATE csa_categories SET ordning = :newrelpos WHERE id = :relid");
$rstmt -> bindValue(":newrelpos", $newrelpos);
$rstmt -> bindValue(":relid", $relid);
$rstmt -> execute();
?>