You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDO UPDATE语句未更新数据库且无报错问题求助

问题分析与修复方案
  • 核心问题:SQL更新逻辑错误
    你的UPDATE语句写法完全错误:

    UPDATE stock_list SET quantity=:quantity+'$quantity' WHERE id=:id
    

    这里你错误地将绑定参数:quantity与POST变量$quantity直接相加,且没有引用数据库中原有库存值做累加。正确逻辑应该是把数据库已有的quantity字段值加上新输入的数量,写法应为:

    UPDATE stock_list SET quantity = quantity + :quantity WHERE id=:id
    
  • 额外问题:参数绑定与变量混用的风险
    你同时混用PDO绑定参数和直接插入PHP变量$quantity,不仅逻辑混乱,还存在SQL注入风险。必须统一使用参数绑定,杜绝直接拼接变量到SQL语句中。

  • 次要问题:数据库连接对象不一致
    代码中用$conn->prepare()创建语句,但最后调用$pdo->close()关闭连接,两个对象不一致,可能导致连接无法正确关闭,建议统一使用同一个连接对象(取决于你session.php里定义的连接变量)。


修复后的完整代码

<?php
    include 'includes/session.php';

    if(isset($_POST['edit'])){
        $id = $_POST['id'];
        $name = $_POST['name'];
        $quantity = $_POST['quantity'];

        try{
            $stmt = $conn->prepare("UPDATE stock_list SET quantity = quantity + :quantity WHERE id=:id");
            $stmt->execute(['quantity' => $quantity, 'id' => $id]);
            $_SESSION['success'] = 'Stock updated successfully';
        }
        catch(PDOException $e){
            $_SESSION['error'] = $e->getMessage();
        }
        
        $conn->close();
    }
    else{
        $_SESSION['error'] = 'Fill up edit Stock form first';
    }

    header('location: stockin.php');

?>

内容的提问来源于stack exchange,提问作者Sencho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:25:24