【问题标题】:PHP PDO/Transaction Update Statmement produces error (SQLSTATE[HY093]: Invalid parameter number: parameter was not defined) [duplicate]PHP PDO/Transaction Update Statmement 产生错误(SQLSTATE[HY093]: Invalid parameter number: parameter was not defined)[重复]
【发布时间】:2019-10-08 06:02:30
【问题描述】:

在以下函数中,我有两个更新语句。第一个执行良好,但第二个没有,产生错误(无效参数号)。 Threshold 是浮点数(例如 0.55,最多两位数),而 Likelihood 和 Consequence 是整数)。

如何更正我的代码以不产生此错误?

public function updateAll($params = [])
{
    $sql = "update
            risklevels
            set
                riskmaximum = :riskmaximum,
                riskhigh = :riskhigh,
                riskmedium = :riskmedium,
                riskminimum = :riskminimum
            where risklevelid = 1";

    $sql2 = "update
             riskmatrixthresholds
             set 
                level = :level
             where likelihood = :likelhood
             and consequence = :consequence";
    try
    {    
        $this->db->beginTransaction();  
        $statement = $this->db->prepare($sql);
        $statement->bindValue(':riskmaximum', $params['Levels']['riskmaximum']);
        $statement->bindValue(':riskhigh' , $params['Levels']['riskhigh']);
        $statement->bindValue(':riskmedium' , $params['Levels']['riskmedium']);
        $statement->bindValue(':riskminimum' , $params['Levels']['riskminimum']);

        $statement->execute(); 

        for ($l = 1; $l <= 5; $l++)
        {
            for($c = 1; $c <= 5; $c++)
            {
                $threshold = $params['Thresholds'][$l][$c];
                $statement2 = $this->db->prepare($sql2);  
                $statement2->bindValue(':level', $threshold);
                $statement2->bindValue(':likelihood', $l);
                $statement2->bindValue(':consequence', $c);
                $statement2->execute();
            }
        }
        $this->db->commit();

        return ["Succeeded" => true, "Result" => "Risk Configuration Updated!"];
    }
    catch (\PDOException $e)
    {
        return ["Succeeded" => false, "Result" => $e->getMessage()];
    }
}

【问题讨论】:

  • 你打错了,你的查询中的参数叫:likelhood而不是:likelihood
  • 当您使用变量但未为其定义值时会发生此错误。在这种情况下,:likelhood 没有定义,但 :likelihood

标签: php mysql pdo


【解决方案1】:

您拼错了一个 SQL 变量。

where likelihood = :likelhood 更改为where likelihood = :likelihood

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2019-09-22
    相关资源
    最近更新 更多