Php PDO如何强制将值更新为int
我有以下pdo声明:Php PDO如何强制将值更新为int,php,mysql,pdo,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::P
$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语句中尝试两次使用同一命名参数,每个参数必须使用一次,而且只能使用一次。显然,这是预期的行为(根据这个bug报告:),因为可移植性问题 可能绑定每个参数都有效:
$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();
}
如果没有,请添加另一个获得相同值的命名参数。不要在一条SQL语句中尝试使用同一命名参数两次,每个参数必须使用一次,并且只能使用一次。显然,这是预期的行为(根据这个bug报告:),因为可移植性问题 可能绑定每个参数都有效:
$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();
}
如果没有,请添加另一个获得相同值的命名参数。如果将所有参数绑定到3占位符,并避免重复:basketid?如果切换股票和卖出的位置,该怎么办。也许只有卖出列在更新?如果您将所有内容都绑定到3个占位符,并避免重复:basketid会怎么样?如果您切换股票和卖出的位置会怎么样。也许只有卖出的栏目在更新?哈哈!!!只是按照@hakre的建议更改了订单,并更新了销售,而不是库存。所以在你发布之前尝试了不同的paramater名称,效果很好!但原始代码在本地工作,但不在服务器上工作。无论如何,谢谢大家!可能您需要首先使用PDO启用错误抛出。比如
$db=newpdo('sqlite:database.sdb');//创建一个新的PDO对象$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//将Errorhandling设置为Exception
LOL!!!只是按照@hakre的建议更改了订单,并更新了销售,而不是库存。所以在你发布之前尝试了不同的paramater名称,效果很好!但原始代码在本地工作,但不在服务器上工作。无论如何,谢谢大家!可能您需要首先使用PDO启用错误抛出。比如$db=newpdo('sqlite:database.sdb');//创建一个新的PDO对象$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//将Errorhandling设置为Exception