问题是我正在尝试使用 PDO 和 CRUD 插入用户,这给了我一个我无法解决的错误。
错误正是这个
SQLSTATE[HY093]:参数号无效:参数未定义
包含表单 high_users.php 的文件:
<form action="administrar_usuario.php" method="POST">
<input type="text" name="nombre" placeholder="Nombre">
<input type="text" name="apellido" placeholder="Apellido">
<input type="text" name="dni" placeholder="DNI">
<input type="text" name="usuario" placeholder="Usuario">
<input type="password" name="contrasena" placeholder="Contraseña">
<input type="email" name="email" placeholder="Correo">
<input type="text" name="direccion" placeholder="Direccion">
<input type="text" name="cod_postal" placeholder="Codigo Postal">
<input type="tel" name="tel" placeholder="Teléfono">
<input type="text" name="fecha_nac" placeholder="Fecha nacimiento">
<input type="text" name="foto" placeholder="foto">
<input type="text" name="curso" placeholder="curso">
<input type='hidden' name='insertar' value='insertar'>
<!--Con esto ejecutamos la funcion de insertar-->
<select name="tipo">
<option value="1">Admin</option>
<option value="2">Administración</option>
<option value="3">Alumno</option>
<option value="4">Profesor</option>
</select>
<input type="submit" name="altaUsuario" value="Crear">
控制器 manage_user.php:
<?php
include_once('crud_usuario.php');
include_once('class_usuarios.php');
$crud = new CrudUsuario();
$usuario = new Usuario();
if (isset($_POST['insertar'])) {
$usuario->setIdUsuario(NULL);
$usuario->setDni($_POST['dni']);
$usuario->setNombre($_POST['nombre']);
$usuario->setApellido($_POST['apellido']);
$usuario->setContrasena($_POST['contrasena']);
$usuario->setEmail($_POST['email']);
$usuario->setUsuario($_POST['usuario']);
$usuario->setDireccion($_POST['direccion']);
$usuario->setCodPostal($_POST['cod_postal']);
$usuario->setTel($_POST['tel']);
$usuario->setFechaNac($_POST['fecha_nac']);
$usuario->setFoto($_POST['foto']);
$usuario->setCurso($_POST['curso']);
$usuario->setTipo($_POST['tipo']);
$crud->insertar($usuario);
}
?>
包含 crud 的文件 crud_usuario.php:
<?php
require_once('conexion.php');
class CrudUsuario{
//constructor de la clase
public function __contruct(){}
public function insertar($usuario){
$db=BaseDatos::conectar();
try {
$insert=$db->prepare('INSERT INTO Usuarios values(NULL,:dni,:nombre,:apellido,:contrasena,:email,:usuario,:direccion,:cod_postal,:telefono,:fecha_nac,:foto,:curso,:estado,:tipo)');
$insert->bindValue('id_usuario',$usuario->getIdUsuario());
$insert->bindValue('nombre',$usuario->getNombre());
$insert->bindValue('apellido',$usuario->getApellido());
$insert->bindValue('contrasena',$usuario->getContrasena());
$insert->bindValue('email',$usuario->getEmail());
$insert->bindValue('usuario',$usuario->getUsuario());
$insert->bindValue('direccion',$usuario->getDireccion());
$insert->bindValue('cod_postal',$usuario->getCodPostal());
$insert->bindValue('telefono',$usuario->getTel());
$insert->bindValue('fecha_nac',$usuario->getFechaNac());
$insert->bindValue('foto',$usuario->getFoto());
$insert->bindValue('curso',$usuario->getCurso());
$insert->bindValue('estado',$usuario->getEstado());
$insert->bindValue('tipo',$usuario->getTipo());
$insert->execute();
}
catch (PDOException $e) {
print $e->getMessage ();
}
}
}
?>
您在代码中有两个错误,一个是在您接收的数据之间准备 SQL 查询时,您在 SQL 查询中输入的数据和您分配的数据,
bindValue
另一个是在分配变量时,您忘记了冒号(放:dni
而不是dni
调用bindValue
)。您正在放入
id_usuario
而不是dni
in$insert->bindValue('id_usuario',$usuario->getIdUsuario());
。通过做错你会导致你得到的错误,即参数id_usuario
未在准备好的查询中定义。我想,基于输入数据和SQL,你想要的是关联值
dni
并通过$usuario->getDni()
.证明:
或者,我更喜欢: