Problems when trying to update with pdo

1

Trying to edit a 'Course' generates this error,

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

My form:

<form action="vista%20normal.php?pagina=administrar_cursos" method="POST" enctype="multipart/form-data" autocomplete="off">
<!--Recuperamos le id y lo pasamos de forma oculta-->
<input type="hidden" name="id_curso" placeholder="Id Curso" id="id_curso" value="<?php echo $curso->getIdCurso(); ?>">
<input type="text" name="nombreCurso" placeholder="Nombre curso" value="<?php echo $curso->getNombreCurso(); ?>">
<input type="text" name="cantAlumnos" placeholder="Cantidad alumnos" value="<?php echo $curso->getCantAlumnos(); ?>">
<input type="date" name="fechaInicio" placeholder="Fecha inicio" value="<?php echo $curso->getFechaInicio(); ?>">
<input type="date" name="fechaFin" placeholder="Fecha fin" value="<?php echo $curso->getFechaFin(); ?>">
<input type="date" name="nivel_curso" placeholder="Nivel Curso" value="<?php echo $curso->getNivelCurso(); ?>">
<input type="text" name="foto" placeholder="foto" value="foto">
<!-- <input type="time" name="duracion" placeholder="Duración" value="<?php //echo $curso->getFechaFin(); ?>"> -->


<select name="estado[]">
    <option value="0">Activado</option>
    <option value="1">Desactivado</option>
</select>

<input type="hidden" name="actualizarCurso" value="actualizar"><!--Con esto ejecutamos la funcion de actualizar-->
<input type="submit" name="editarCurso" value="Editar">

Course Manager,

elseif(isset($_POST['actualizarCurso'])){
$curso->setIdCurso($_POST['id_curso']);
$curso->setNombreCurso($_POST['nombreCurso']);
$curso->setCantAlumnos($_POST['cantAlumnos']);
$curso->setFechaInicio($dateInicio);
$curso->setFechaFin($dateFin);
$curso->setNivelCurso($_POST['nivel_curso']);
$curso->setFoto('foto');
$curso->setEstadoCurso($_POST['estado']);
$crud->actualizarCurso($curso);
//header('Location: vista%20normal.php?pagina=lista_cursos');

}

And finally the updateCourse function,

public function actualizarCurso($curso){
    $curso = new Curso();
    $db = BaseDatos::conectar();
    try {
    $actualizar = $db->prepare('
      UPDATE Curso
      SET
        id_curso = :id_curso,
        nombre = :nombreCurso,
        cant_alumnos = :cantAlumnos,
        fecha_inicio = :fechaInicio,
        fecha_fin = :fechaFin,
        nivel_curso = :nivel_curso,
        foto = :foto,
        estado = :estado
      WHERE id_curso = :id_curso
    ');
    echo $curso->getNombreCurso();
    $actualizar->bindValue(':id_curso', $curso->getIdCurso());
    $actualizar->bindValue(':nombre', $curso->getNombreCurso());
    $actualizar->bindValue(':cant_alumnos', $curso->getCantAlumnos());
    $actualizar->bindValue(':fecha_inicio', $curso->getFechaInicio());
    $actualizar->bindValue(':fecha_fin', $curso->getFechaFin());
    $actualizar->bindValue(':nivel_curso', $curso->getNivelCurso());
    $actualizar->bindValue(':foto', $curso->getFoto());
    $actualizar->bindValue(':estado', $curso->getEstadoCurso());
    $actualizar->execute();/*ejecutamos la sentencia.*/
}
    catch (PDOException $e) {
        print $e->getMessage()."Este es un error";
    }
}
    
asked by sergibarca 12.04.2018 в 10:57
source

1 answer

2

Try putting the ids with their corresponding ones:

$actualizar = $db->prepare('
  UPDATE Curso
  SET
    id_curso = :id_curso,
    nombre = :nombre,
    cant_alumnos = :cant_alumnos,
    fecha_inicio = :fecha_inicio,
    fecha_fin = :fecha_fin,
    nivel_curso = :nivel_curso,
    foto = :foto,
    estado = :estado
  WHERE id_curso = :id_curso
');
//...
$actualizar->bindValue(':id_curso', $curso->getIdCurso());
$actualizar->bindValue(':nombre', $curso->getNombreCurso());
$actualizar->bindValue(':cant_alumnos', $curso->getCantAlumnos());
$actualizar->bindValue(':fecha_inicio', $curso->getFechaInicio());
$actualizar->bindValue(':fecha_fin', $curso->getFechaFin());
$actualizar->bindValue(':nivel_curso', $curso->getNivelCurso());
$actualizar->bindValue(':foto', $curso->getFoto());
$actualizar->bindValue(':estado', $curso->getEstadoCurso());

Or on the contrary:

$actualizar = $db->prepare('
  UPDATE Curso
  SET
    id_curso = :id_curso,
    nombre = :nombreCurso,
    cant_alumnos = :cantAlumnos,
    fecha_inicio = :fechaInicio,
    fecha_fin = :fechaFin,
    nivel_curso = :nivel_curso,
    foto = :foto,
    estado = :estado
  WHERE id_curso = :id_curso
');
//...
$actualizar->bindValue(':id_curso', $curso->getIdCurso());
$actualizar->bindValue(':nombreCurso', $curso->getNombreCurso());
$actualizar->bindValue(':cantAlumnos', $curso->getCantAlumnos());
$actualizar->bindValue(':fechaInicio', $curso->getFechaInicio());
$actualizar->bindValue(':fechaFin', $curso->getFechaFin());
$actualizar->bindValue(':nivel_curso', $curso->getNivelCurso());
$actualizar->bindValue(':foto', $curso->getFoto());
$actualizar->bindValue(':estado', $curso->getEstadoCurso());
    
answered by 12.04.2018 / 11:24
source