点击收藏按钮插入数据库时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
相关产品推荐
相关产品推荐

