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

点击收藏按钮插入数据库时golf_price为0的问题求助

问题解决:收藏功能中golf_price字段存入0而非实际价格的修复思路

问题现象

点击「添加到收藏」按钮时,系统可成功插入user_id与golf_id,但golf_price字段始终被存入数值‘0’,而非商品实际价格。

问题根源

在toggleFavourite方法的新增收藏分支中,你将$golf_price赋值为一段SQL查询字符串,而非执行该查询后得到的实际价格值。当PDO尝试将这个字符串插入数值类型的字段时,数据库会自动将字符串转换为数值,最终结果就是0。

修复步骤

1. 执行查询获取实际价格

替换原代码中仅定义SQL字符串的逻辑,改为实际执行查询并提取价格:

// 原错误代码
// $golf_price = "SELECT golf_price FROM products WHERE golf_id = :golf_id";

// 修复后:执行查询获取实际价格
$priceQuery = "SELECT golf_price FROM products WHERE golf_id = :golf_id";
$priceStmt = $this->Conn->prepare($priceQuery);
$priceStmt->execute(['golf_id' => $golf_id]);
$golf_price = $priceStmt->fetchColumn(); // 直接获取单列结果

2. 处理商品不存在的边界情况(可选但推荐)

如果products表中没有对应golf_id的记录,$golf_price会返回false,此时可以添加判断避免无效插入:

if ($golf_price === false) {
    // 可根据业务需求返回错误或抛出异常
    return false;
}

3. 修正返回语句顺序

原代码中return $stmt->execute(...)之后的return true;永远不会执行,因为前面的return已经终止了方法,调整为:

$result = $stmt->execute([
    "user_id"=> $_SESSION['user_data']['user_id'],
    "golf_id" => $golf_id,
    "golf_price" => $golf_price
]);
return $result; // 插入成功返回true,失败返回false

完整修复后的toggleFavourite方法

public function toggleFavourite($golf_id){
    // Check if club is already in basket
    $is_favourite = $this->isFavourite($golf_id);

    if($is_favourite) {
        // Is already favourite - so remove. 
        $query = "DELETE FROM user_favourites WHERE user_fav_id = :user_fav_id";
        $stmt = $this->Conn->prepare($query);
        $stmt->execute([
            "user_fav_id" => $is_favourite['user_fav_id']
        ]);
        return false; // Return false for "removed"
    } else {
        // Is not favourite - so add
        // 先查询获取实际商品价格
        $priceQuery = "SELECT golf_price FROM products WHERE golf_id = :golf_id";
        $priceStmt = $this->Conn->prepare($priceQuery);
        $priceStmt->execute(['golf_id' => $golf_id]);
        $golf_price = $priceStmt->fetchColumn();
        
        // 处理商品不存在的情况
        if ($golf_price === false) {
            return false;
        }
        
        $query = "INSERT INTO user_favourites (user_id, golf_id, golf_price) VALUES (:user_id, :golf_id, :golf_price)";
        $stmt = $this->Conn->prepare($query);
        $result = $stmt->execute([
            "user_id"=> $_SESSION['user_data']['user_id'],
            "golf_id" => $golf_id,
            "golf_price" => $golf_price
        ]);
        
        return $result;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:02:36