我有一种机制,旨在允许用户控制产品出现在产品组中的顺序。有一个“ ”表(MySQL),其中包含、和. 前两个将产品分配到组,第三个确定顺序。grouplines
group_id
product_id
manual_order
这些manual_order
值从 10 开始并以10为增量递增。因此,例如,将产品移动到列表中的第 3 位,只需将其值更改为 25,然后重新计算值。这是通过获取按 排序的产品 id 列表并以递增方式对其重新编号来完成的。manual_order
manual_order
manual_order
这段代码有效:
$products = array();
$dbh = s3_pdo::get_connection();
$query = $dbh->prepare('SELECT product_id FROM grouplines WHERE group_id=:group_id ORDER BY manual_order');
$query->bindValue(':group_id', $group_id);
$query->execute();
$rows = $query->fetchAll();
$query->closeCursor();
if ($rows) {
$query = $dbh->prepare('UPDATE grouplines SET manual_order=:manual_order WHERE group_id=:group_id AND product_id=:product_id');
$query->bindValue(':group_id', $group_id);
//$query->bindParam(':product_id', $row['product_id']);
$query->bindParam(':product_id', $product_id);
$query->bindParam(':manual_order', $i);
$i = 10;
foreach ($rows as $row) {
$product_id = $row['product_id'];
$query->execute();
$i += 10;
}
}
这不会:
$products = array();
$dbh = s3_pdo::get_connection();
$query = $dbh->prepare('SELECT product_id FROM grouplines WHERE group_id=:group_id ORDER BY manual_order');
$query->bindValue(':group_id', $group_id);
$query->execute();
$rows = $query->fetchAll();
$query->closeCursor();
if ($rows) {
$query = $dbh->prepare('UPDATE grouplines SET manual_order=:manual_order WHERE group_id=:group_id AND product_id=:product_id');
$query->bindValue(':group_id', $group_id);
$query->bindParam(':product_id', $row['product_id']);
//$query->bindParam(':product_id', $product_id);
$query->bindParam(':manual_order', $i);
$i = 10;
foreach ($rows as $row) {
//$product_id = $row['product_id'];
$query->execute();
$i += 10;
}
}
正如您所看到的,不同之处在于第二段代码绑定$product_id
了foreach 循环,而第一段代码尝试在循环之外绑定(from $row['product_id'])
......据我所知应该工作,但没有。$row['product_id']
我只能猜测为什么第二段代码不起作用,因为我找不到明确的答案。我想要一个明确的答案,因为我不熟悉使用 mysql_ 函数,PDO
并且不想在我将系统的其余部分转换为使用PDO
而不是旧的mysql_函数时遇到这种事情。