Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO如何强制将值更新为int_Php_Mysql_Pdo - Fatal编程技术网

Php PDO如何强制将值更新为int

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

我有以下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语句中尝试两次使用同一命名参数,每个参数必须使用一次,而且只能使用一次。显然,这是预期的行为(根据这个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