在我看来,一切都很顺利,但是当它发表声明时,它给了我以下错误:
致命错误:在/Applications/XAMPP/xamppfiles/htdocs/APP2/include/crud_usuario.php:119 中带有消息“SQLSTATE [HY093]:无效参数编号:未定义参数”的未捕获异常“PDOException”:119 堆栈跟踪:#0 / Applications/XAMPP/xamppfiles/htdocs/APP2/include/crud_user.php(119): PDOStatement->execute() #1 /Applications/XAMPP/xamppfiles/htdocs/APP2/include/admin_user.php(42): CrudUsuario-> update(Object(User)) #2 {main} 在第 119 行的 /Applications/XAMPP/xamppfiles/htdocs/APP2/include/crud_user.php 中抛出
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();
}
您遇到的问题是您在 SQL 中使用命名占位符,但
:cruso
随后curso=:cruso
将值分配给.:curso
bindValue
在执行 PDO 查询时,由于 MySQL 没有找到所有标记的值,因此会产生异常,这就是出现错误消息的原因:
在西班牙语中:
理想情况下,它会
bindValue
检测到不一致,但不幸的是,情况并非如此,这就是为什么这是一个非常常见的错误。我已经修复了您的代码,以便在 SQL 中显示正确的名称: