PDO如何强制将值更新为int

时间:2011-12-15 13:54:08

标签: php mysql pdo

我有以下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?

由于

1 个答案:

答案 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();
}

如果没有,请添加另一个获得相同值的命名参数。