Trying to update a column in database but i keep getting this error: Fatal error: Uncaught PDOException: SQLSTATE[HY093]:

Trying to update a column in database but i keep getting this error: Fatal error: Uncaught PDOException: SQLSTATE[HY093]:

这是我不断收到的错误:

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\premiumems\classes\Admin.php:89 Stack trace: #0 C:\xampp\htdocs\premiumems\classes\Admin.php(89): PDOStatement->execute() #1 C:\xampp\htdocs\premiumems\process.php(60): Admin->update(Array, '1') #2 {main} thrown in C:\xampp\htdocs\premiumems\classes\Admin.php on line 89

public function update($fields, $id)
{
    //$sql= UPDATE admin SET name = :name,

    $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 admin SET".$st;
    $sql.=  "WHERE admin_id =".$id;
    $stmt=$this->connection()->prepare($sql);
    foreach ($fields as $key => $value) 
    {
        // code...
        $stmt->bindValue(':' .$key, $value);
    }

    $stmtexec=$stmt->execute();

    if ($stmtexec) 
    {
        // code...
        $reply = "employee updated successfully";
        $_SESSION['success']=$reply;
        header('location:index.php');
    } 
    else 
    {
         // code...

         $reply = "unable to update employee, try again later";
         $_SESSION['failure']=$reply;
         header('location:edit.php?staffid='.$admin_id);
    }
} //function used for updating files

class处理上面的更新过程。

认为您应该尝试下面的代码。

public function update($fields, $id)
{
  //$sql= UPDATE admin SET name = :name,

  $fields = (array) $fields;

  if ( count($fields) > 0)
  {
    // update
    $total = count($fields);
    $keys = array_keys($fields);
    $values = array_values($fields);

    $set = "SET ";

    $dataParams = [];

    // Handle keys
    if ($total == 1)
    {
        $set .= $keys[0] .' = :'.$keys[0];
        $dataParams[':'.$keys[0]] = $values[0];
    }
    else
    {
        foreach ($keys as $i => $key)
        {
            $set .= $key .' = :'.$key . ', ';
            $dataParams[':'.$key] = $values[$i];
        }
    }

    $set = rtrim($set, ', ');

    $sql = "UPDATE admin {$set} WHERE admin_id = {$id}";

    $stmt = $this->connection();
    $stmt->prepare($sql);
    $execute = $stmt->execute($dataParams);

    // should work fine here.

    var_dump($execute);
  }
  else
  {
    return false;
  }
}