Php 未捕获的PDOException:SQLSTATE[HY093]:无效参数编号:未定义参数

Php 未捕获的PDOException:SQLSTATE[HY093]:无效参数编号:未定义参数,php,mysql,pdo,Php,Mysql,Pdo,未捕获PDOException:SQLSTATE[HY093]:无效参数编号:第73行未定义参数 这个错误是什么 $stmtExec = $stmt->execute(); // the line 73 Employee.php public function update($fields,$id){ $st = ""; $counter = 1; $total_fields = count($fields); foreach ($fields as $k

未捕获PDOException:SQLSTATE[HY093]:无效参数编号:第73行未定义参数

这个错误是什么

$stmtExec = $stmt->execute(); // the line 73
Employee.php

public function update($fields,$id){
    $st = "";
    $counter = 1;
    $total_fields = count($fields);
    foreach ($fields as $key => $value) {
        if ($counter === $total_fields) {
            $set = "$key = :".$key;
            $st = $st.$set;
        } else{
            $set = "$key = :".$key.",";
            $st = $st.$set;
            $counter++;
        }
    }

    $sql = "";
    $sql.= "UPDATE info SET".$st;
    $sql.= "WHERE id =".$id;

    $stmt = $this->connect()->prepare($sql);

    foreach ($fields as $key => $value) {
        $stmt->bindValue(':'.$key, $value);
    }

    $stmtExec = $stmt->execute(); // here is the line with the error

    if ($stmtExec) {
        header('Location:index.php');
    }
}

有一些语法错误。像
SET
之后和
WHERE
关键字之前没有空格一样。我已经添加并更新了您的代码

public function update($fields, $id) {
    $st = "";
    $counter = 1;
    $total_fields = count($fields);
    foreach ($fields as $key => $value) {
        if ($counter === $total_fields) {
            $st .= "$key = :" . $key;
        } else {
            $st .= "$key = :" . $key . ",";
            $counter++;
        }
    }
    $sql = "UPDATE info SET " . $st . " WHERE id =" . $id;

    $stmt = $this->connect()->prepare($sql);

    foreach ($fields as $key => $value) {
        $stmt->bindValue(':' . $key, $value);
    }

    $stmtExec = $stmt->execute();

    if ($stmtExec) {
        header('Location:index.php');
    }
}

从echo$sql开始在
设置
之后和
之前需要空格,其中
从不重置
$sql
,这并不是此函数中的一个大问题,因为;这是一种用法,但总的来说,重置变量以供使用是最佳做法。即,<代码>$sql.=“UPDATE…,这总是附加到一个变量,该变量在技术上不存在于范围内,因为您没有声明它您是对的。我错过了这一点。我还有一个关于“尝试此”的大问题“键入答案,它们并没有真正的帮助,因为OP可能看不到您所做的更改-请添加解释,以便OP和未来读者清楚了解您所做的更改/原因