[HY093]: Invalid parameter number: parameter was not defined [closed]

1

In my opinion everything goes Ok, but when it makes the sentence it gives me the following error:

  

Fatal error: Uncaught exception 'PDOException' with message   'SQLSTATE [HY093]: Invalid parameter number: parameter was not defined'   in   /Applications/XAMPP/xamppfiles/htdocs/APP2/include/crud_usuario.php:119   Stack trace: # 0   /Applications/XAMPP/xamppfiles/htdocs/APP2/include/crud_usuario.php(119):   PDOStatement-> execute () # 1   /Applications/XAMPP/xamppfiles/htdocs/APP2/include/administrar_usuario.php(42):   CrudUsuario-> update (Object (User)) # 2 {main} thrown in   /Applications/XAMPP/xamppfiles/htdocs/APP2/include/crud_usuario.php on   line 119

public function actualizar($usuario){
    $db = BaseDatos::conectar();
    $actualizar = $db->prepare('UPDATE Usuario SET usuario=:usuario,contrasena=:contrasena,nombre=:nombre,apellido=:apellido,dni=:dni,email=:email,telefono=:telefono,direccion=:direccion,cod_postal=:cod_postal,fecha_nac=:fecha_nac,curso=:cruso,foto=:foto,estado=:estado,tipo=:tipo WHERE id_usuario=:id_usuario');

    $actualizar->bindValue(':id_usuario', NULL);
    $actualizar->bindValue(':nombre',$usuario->getNombre());
    $actualizar->bindValue(':apellido',$usuario->getApellido());
    $actualizar->bindValue(':dni',$usuario->getDni());
    $actualizar->bindValue(':usuario',$usuario->getUsuario());
    $actualizar->bindValue(':contrasena',$usuario->getContrasena());
    $actualizar->bindValue(':email',$usuario->getEmail());
    $actualizar->bindValue(':telefono',$usuario->getTel());
    $actualizar->bindValue(':direccion',$usuario->getDireccion());
    $actualizar->bindValue(':cod_postal',$usuario->getCodPostal());
    $actualizar->bindValue(':fecha_nac',$usuario->getFechaNac());
    $actualizar->bindValue(':curso',$usuario->getCurso());
    $actualizar->bindValue(':foto',$usuario->getFoto());
    $actualizar->bindValue(':estado',$usuario->getEstado());
    $actualizar->bindValue(':tipo',$usuario->getTipo());

    $actualizar->execute();
}
    
asked by sergibarca 23.03.2018 в 13:12
source

1 answer

2

The problem you are suffering is that you are using a placeholder with the name :cruso ( curso=:cruso ) in the SQL but then you assign value to the marker :curso in bindValue .

When executing the PDO query, you get an exception because MySQL does not find values for all the markers, so you get that error message:

  

Invalid parameter number: parameter was not defined

In Spanish:

  

Invalid parameter number: the parameter was not defined

Ideally, bindValue would be the one who detected inconsistencies, but unfortunately this is not the case and hence this is a very common error.

I have fixed your code so that the correct name is displayed in the SQL:

public function actualizar($usuario) {
    $db = BaseDatos::conectar();
    $actualizar = $db->prepare('
      UPDATE Usuario
      SET
        usuario = :usuario,
        contrasena = :contrasena,
        nombre = :nombre,
        apellido = :apellido,
        dni = :dni,
        email = :email,
        telefono = :telefono,
        direccion = :direccion,
        cod_postal = :cod_postal,
        fecha_nac = :fecha_nac,
        curso = :curso,
        foto = :foto,
        estado = :estado,
        tipo = :tipo
      WHERE id_usuario = :id_usuario
    ');

    $actualizar->bindValue(':usuario', $usuario->getUsuario());
    $actualizar->bindValue(':contrasena', $usuario->getContrasena());
    $actualizar->bindValue(':nombre', $usuario->getNombre());
    $actualizar->bindValue(':apellido', $usuario->getApellido());
    $actualizar->bindValue(':dni', $usuario->getDni());
    $actualizar->bindValue(':email', $usuario->getEmail());
    $actualizar->bindValue(':telefono', $usuario->getTel());
    $actualizar->bindValue(':direccion', $usuario->getDireccion());
    $actualizar->bindValue(':cod_postal', $usuario->getCodPostal());
    $actualizar->bindValue(':fecha_nac', $usuario->getFechaNac());
    $actualizar->bindValue(':curso', $usuario->getCurso());
    $actualizar->bindValue(':foto',$usuario->getFoto());
    $actualizar->bindValue(':estado',$usuario->getEstado());
    $actualizar->bindValue(':tipo',$usuario->getTipo());
    $actualizar->bindValue(':id_usuario', $usuario->getIdUsuario());

    $actualizar->execute();
}
    
answered by 23.03.2018 / 13:55
source