我有以下pdo声明:
$stmt = $db->prepare("update product_active set stock=stock-:basketid, sold=sold+:basketid where productid_FK=:pid");
foreach($_SESSION['basket'] as $pid=>$val){
$stmt->bindParam(":basketid", $_SESSION['basket'][$pid], PDO::PARAM_INT);
$stmt->bindParam(":pid", $pid, PDO::PARAM_INT);
$stmt->execute();
}
这基本上更新了库存,这在本地工作,但在我的服务器上只有库存列正在更新。我有一种感觉,这是因为售卖可能是一根绳子。
有没有强制更新为int?
由于
答案 0 :(得分:1)
不要尝试在单个SQL语句中两次使用相同的命名参数,必须使用一次且每次只能使用一次。显然这是预期的行为(根据此错误报告:http://bugs.php.net/bug.php?id=33886),因为可移植性问题。
可能绑定每个参数有效:
$stmt = $db->prepare("update product_active set stock=stock-:basketid, sold=sold+:basketid where productid_FK=:pid");
foreach ($_SESSION['basket'] as $pid=>$val)
{
$basketid = $_SESSION['basket'][$pid];
$stmt->bindParam(":basketid", $basketid, PDO::PARAM_INT);
$stmt->bindParam(":basketid", $basketid, PDO::PARAM_INT);
$stmt->bindParam(":pid", $pid, PDO::PARAM_INT);
$stmt->execute();
}
如果没有,请添加另一个获得相同值的命名参数。