我想做的是拖/放顺序设置。我有 jQuery 设置来将序列化作业发送到我的 php 脚本,但由于某种原因它没有更新。我有一个 echo 语句,它向我显示对象的顺序是正确的:
ID = 2 Counter = 1
ID = 1 Counter = 2
这也意味着该函数被正确调用,但它似乎并没有真正更新表,我的其余插入/更新工作正常,所以它不是连接。
功能:
public function set_member_order($OrderArray) {
$query = $this->db->prepare(
"UPDATE
`member`
SET
`sort` = :sort
WHERE
`member_id` = :member_id");
$sort = 0;
$member_id = 0;
$query->bindValue(':sort', $sort);
$query->bindValue(':member_id', $member_id);
$counter = 1;
foreach ($OrderArray as $member_id) {
$sort = $counter;
echo "ID = ".$member_id." Counter = ".$sort. "<br />";
$query->execute();
$counter ++;
}
}
我一定错过了一些东西,因为这应该相当简单,但我无法确定它。当我运行它并检查数据时,它说排序顺序仍然是 1,1 和 2,2(默认值)。我还确信这些 ID 是正确的,因为我首先从数据库中提取了它们。
$rows = $query->rowCount();
还显示每行有 0 行受到影响,当它应该更新时,不确定为什么它没有命中数据库,我是否错误地绑定(bind)了它们?将它们转换为 int 并使用 PDO::PARAM_INT 也没有帮助。该表中仅有的两个member_id是1和2。如果我手动运行它并手动输入值,该查询也是有效的。
编辑: 我尝试将member_id初始化更改为
$member_id = 1;
并将 1 的 member_id 设置为 0 排序,这对我来说确实没有意义。
最佳答案
您使用了错误的绑定(bind)方法。您需要bind the parameter而不是值(绑定(bind)时两者均为 0)。
更改:
$query->bindValue(':sort', $sort);
$query->bindValue(':member_id', $member_id);
至:
$query->bindParam(':sort', $sort);
$query->bindParam(':member_id', $member_id);
您可以使用bindValue()
但是在设置变量之后,您必须在循环中绑定(bind)。
关于PHP MySQL/PDO 更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21893039/