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

当状态为settled时停止更新同lead_id的Value列(PHP+MySQL)

需求与代码修改方案

需求说明

我有一个MySQL数据表,存在多个用户承接同一lead_id商机的场景。要求:当该商机(对应同一client_id)下已有记录状态为settled时,禁止更新相关业务字段。

原代码问题分析

  1. 逻辑混乱:循环查询到的每条记录,只要遇到pending状态就执行更新,若同时存在settled记录会触发重复提示,不符合“有settled则停止更新”的核心需求。
  2. 无全局校验:未先判断商机下是否已存在settled状态记录,可能导致重复操作。
  3. 安全隐患:直接将变量拼接进SQL语句,存在SQL注入风险。

修改后的代码

<?php
// 先校验该商机下是否已有settled状态的记录
$checkSql = "SELECT COUNT(*) AS settled_count FROM `deal_request` WHERE `client_id` = ? AND `status` = 'settled'";
$stmt = mysqli_prepare($connection, $checkSql);
mysqli_stmt_bind_param($stmt, "s", $client_id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$row = mysqli_fetch_assoc($result);

if ($row['settled_count'] > 0) {
    // 已有承接记录,禁止操作
    echo "<script>
            alert('该商机已被其他用户承接,无法重复操作!');
            window.location.replace('LeadDetails.php?client_id=$client_id&&dealer_id=$dealer_id');
          </script>";
} else {
    // 无已承接记录,执行更新
    $updateSql = "UPDATE `deal_request` SET `status`='settled',`share_userdetails`='2' WHERE `client_id`=? AND `dealer_id`=?";
    $updateStmt = mysqli_prepare($connection, $updateSql);
    mysqli_stmt_bind_param($updateStmt, "ss", $client_id, $dealer_id);
    $executeResult = mysqli_stmt_execute($updateStmt);
    
    if ($executeResult) {
        echo "<script>
                alert('成功释放商机!');
                window.location.replace('LeadDetails.php?client_id=$client_id&&dealer_id=$dealer_id');
              </script>";
    } else {
        echo "<script>
                alert('操作失败,请重试!');
                window.location.replace('LeadDetails.php?client_id=$client_id&&dealer_id=$dealer_id');
              </script>";
    }
}
?>

修改说明

  • 前置全局校验:通过计数查询先判断商机是否已被承接,从根源阻止不符合要求的更新操作。
  • 安全优化:使用MySQLi预处理语句绑定参数,避免SQL注入风险。
  • 逻辑简化:去掉冗余循环,直接根据校验结果执行对应操作,流程更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:26:09