SQLSTATE[HY093]:无效的参数编号:未使用PDO定义参数


SQLSTATE[HY093]: Invalid parameter number: parameter was not defined using PDO

我修改了代码,但找不到错误,这看起来很简单,但从代码中看不到任何东西。有人能帮我吗?非常感谢。

这和更新记录的代码

// update modelo
public function alteraModelo($modelo){
    try{    
        // monta consulta SQL para atualização do registro
        $sql = "UPDATE modelos SET 
                    nome =          :nome,
                    fone =          :fone,
                    email =         :email,
                    face =          :face,
                    altura =        :altura,
                    peso =          :peso,
                    idade =         :idade,
                    categoria =     :categoria,
                    data_fotos =            :data_fotos";
                    if($_FILES['foto1']['size'] > 0){
                        $sql .= "foto1 = :foto1,";
                    }
                    if($_FILES['foto2']['size'] > 0){
                        $sql .= "foto2 = :foto2,";
                    }
                    if($_FILES['foto3']['size'] > 0){
                        $sql .= "foto3 = :foto3,";
                    }
                    if($_FILES['foto4']['size'] > 0){
                        $sql .= "foto4 = :foto4,";
                    }
                    if($_FILES['foto5']['size'] > 0){
                        $sql .= "foto5 = :foto5,";
                    }
                    if($_FILES['foto6']['size'] > 0){
                        $sql .= "foto6 = :foto6,";
                    }
                    $sql .="link_video =    :link_video
                        WHERE id =  :id";
        // prepara consulta para o PDO
        $stmt = $this->prepare($sql);
        $data = Util::dataToSql($modelo['data_fotos']);
        // seta os parametros
        $stmt->bindParam(":data_fotos", $data);
        $stmt->bindParam(":nome", $modelo['nome']);
        $stmt->bindParam(":fone", $modelo['fone']);
        $stmt->bindParam(":email", $modelo['email']);
        $stmt->bindParam(":face", $modelo['face']);
        $stmt->bindParam(":altura", $modelo['altura']);
        $stmt->bindParam(":peso", $modelo['peso']);
        $stmt->bindParam(":idade", $modelo['idade']);
        $stmt->bindParam(":link_video", $modelo['link_video']);
        $stmt->bindParam(":categoria", $modelo['categoria']);
        if($_FILES['foto1']['size'] > 0){
            //Se a foto for atualizada
            $registro_antigo = $this->getModeloById($modelo['id']);
            //Remove o arquivo
            @unlink($registro_antigo['foto1']);
            $arquivo1 = "upload/" . date('YmdHis') . "_" . $_FILES['foto1']['name'];
            move_uploaded_file($_FILES['foto1']['tmp_name'], APPLICATION_PATH . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . $arquivo1);
            $stmt->bindParam(":foto1", $arquivo1);
        }
        if($_FILES['foto2']['size'] > 0){
            //Se a foto for atualizada
            $registro_antigo = $this->getModeloById($modelo['id']);
            //Remove o arquivo
            @unlink($registro_antigo['foto2']);
            $arquivo2 = "upload/" . date('YmdHis') . "_" . $_FILES['foto2']['name'];
            move_uploaded_file($_FILES['foto2']['tmp_name'], APPLICATION_PATH . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . $arquivo2);
            $stmt->bindParam(":foto2", $arquivo2);
        }
        if($_FILES['foto3']['size'] > 0){
            //Se a foto for atualizada
            $registro_antigo = $this->getModeloById($modelo['id']);
            //Remove o arquivo
            @unlink($registro_antigo['foto3']);
            $arquivo3 = "upload/" . date('YmdHis') . "_" . $_FILES['foto3']['name'];
            move_uploaded_file($_FILES['foto3']['tmp_name'], APPLICATION_PATH . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . $arquivo3);
            $stmt->bindParam(":foto3", $arquivo3);
        }
        if($_FILES['foto4']['size'] > 0){
            //Se a foto for atualizada
            $registro_antigo = $this->getModeloById($modelo['id']);
            //Remove o arquivo
            @unlink($registro_antigo['foto4']);
            $arquivo4 = "upload/" . date('YmdHis') . "_" . $_FILES['foto4']['name'];
            move_uploaded_file($_FILES['foto4']['tmp_name'], APPLICATION_PATH . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . $arquivo4);
            $stmt->bindParam(":foto4", $arquivo4);
        }
        if($_FILES['foto5']['size'] > 0){
            //Se a foto for atualizada
            $registro_antigo = $this->getModeloById($modelo['id']);
            //Remove o arquivo
            @unlink($registro_antigo['foto5']);
            $arquivo5 = "upload/" . date('YmdHis') . "_" . $_FILES['foto5']['name'];
            move_uploaded_file($_FILES['foto5']['tmp_name'], APPLICATION_PATH . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . $arquivo5);
            $stmt->bindParam(":foto5", $arquivo5);
        }
        if($_FILES['foto6']['size'] > 0){
            //Se a foto for atualizada
            $registro_antigo = $this->getModeloById($modelo['id']);
            //Remove o arquivo
            @unlink($registro_antigo['foto6']);
            $arquivo6 = "upload/" . date('YmdHis') . "_" . $_FILES['foto6']['name'];
            move_uploaded_file($_FILES['foto6']['tmp_name'], APPLICATION_PATH . DIRECTORY_SEPARATOR . ".." . DIRECTORY_SEPARATOR . $arquivo6);
            $stmt->bindParam(":foto6", $arquivo6);
        }
        $stmt->bindParam(":id", $modelo['id']);
        // atualiza registro
        $stmt->execute();
    } catch (Exception $e){
            echo $e->getMessage();
        }
}

从代码中我看不出任何东西。

没错没有人这样做。一个旨在运行的代码,而不是为了让人钦佩。

看,您正在编写一个程序来构建SQL查询。但是这个项目的结果是什么呢?你知道吗?否
为什么不告诉您的代码回显查询,看看是否一切正常?

为什么不同时回显所有绑定变量,并将它们与查询中的参数进行比较?

此外,您将照片存储在数据库中的想法是错误的
表中永远不应该有枚举字段。如果你有一个——你做错了什么必须使用另一个表来存储所有重复的类似数据。