我有以下 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();
}
这基本上更新了库存,这在本地工作,但在我的服务器上只有库存列正在更新。我有一种感觉,这是因为 sell 可能会以字符串的形式出现。
是否有办法强制这两个更新都是 int?
谢谢
最佳答案
不要尝试在单个 SQL 语句中两次使用相同的命名参数,每个参数必须且只能使用一次。显然,由于可移植性问题,这是预期的行为(根据此错误报告:http://bugs.php.net/bug.php?id=33886)。
绑定(bind)每个参数可能有效:
$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();
}
如果没有,请添加另一个具有相同值的命名参数。
关于php - PDO如何强制将值更新为int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521168/