PHP - Problema al registrar en la base de datos

 
Vista:
Imágen de perfil de Álvaro
Val: 65
Ha disminuido su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al registrar en la base de datos

Publicado por Álvaro (22 intervenciones) el 04/12/2019 11:46:16
Buenos días / tardes / noches. Continuo con el proyecto de la tienda de libros online, y finalmente ya he implementado la base de datos. Estoy usando PDO (en la conexión, sentencias SQL, etc.) y la conexión me funciona, no me sale ningún error, el fallo me sale a la hora de yo querer insertar datos en la tabla de UsuariosRegistrados. Antes de seguir me gustaría dejar el esquema ER para una mejor explicación en esta duda:


ER-BD

Y para descartar posibles fallos de una repetición de clave primaria, la tabla UsuariosRegistrados está vacía:


tabla-bd

El fallo que me aparece es a la hora, como dije anteriormente, de la inserción de usuarios mediante el formulario:


Anotacion-2019-12-04-104157

Cuando quiero registrar los datos que se ven en la imagen, aparece el siguiente fallo:


error

Obviando los mensajes de "Conexion abierta" y "Conexion cerrada" (meras pruebas para saber si ocurre algún fallo", me cita que hay un error sintáctico en la sentencia SQL. Pues bien, dicha sentencia la tengo de la siguiente manera:


datosUser

Partiendo de los atributos de la clase Usuario, la sentencia la planteo de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public function registrarse()
{
    $conexion = new Conexion();
    $connection = $conexion->abrirConexion();
 
    if (isset($connection)) {
        try {
 
            $this->fechaNacimiento = date("Y-m-d", strtotime($this->fechaNacimiento));
            $this->contrasenya = password_hash($this->contrasenya, PASSWORD_BCRYPT);
 
            $sql = "INSERT INTO UsuariosRegistrados (nombre, contraseña, email, direccion, fechaNacimiento, esAdministrador) VALUES (:nombre, :contrasenya, :email, :direccion, :fechaNacimiento, :esAdministrador)";
 
            $sentencia = $connection->prepare($sql);
 
            $sentencia->bindParam(":nombre", $this->nombre, PDO::PARAM_STR);
            $sentencia->bindParam(":contrasenya", $this->contrasenya, PDO::PARAM_STR);
            $sentencia->bindParam(":email", $this->email, PDO::PARAM_STR);
            $sentencia->bindParam(":direccion", $this->direccion, PDO::PARAM_STR);
            $sentencia->bindParam(":fechaNacimiento", $this->fechaNacimiento, PDO::PARAM_STR);
            $sentencia->bindParam(":esAdministrador", $this->esAdministrador, PDO::PARAM_BOOL);
 
            $sentencia->execute();
 
 
        } catch (PDOException $ex) {
            echo "Error: " . $ex->getMessage();
        }
    }
 
    $conexion->cerrarConexion();
 
}

A priori no veo ningún fallo, por eso agradecería cualquier ayuda o consejo.

Muchas gracias, y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Bryan Alexander
Val: 116
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problema al registrar en la base de datos

Publicado por Bryan Alexander (45 intervenciones) el 04/12/2019 14:38:06
Pregunta super simple para iniciar, ya trataste de insertar via codigo quemado, la data dentro de tu tabla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Álvaro
Val: 65
Ha disminuido su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al registrar en la base de datos

Publicado por Álvaro (12 intervenciones) el 04/12/2019 14:53:36
Disculpa por responder con otra pregunta ¿A qué te refieres exactamente? He probado a insertar datos en crudo, es decir, manualmente, sin formulario ninguno, y me funciona. Supongo que te referirás a esto:


1
2
INSERT INTO UsuariosRegistrados (nombre, contraseña, email, direccion, fechaNacimiento, esAdministrador) VALUES ('Usuario', '12345', 'prueba@prueba.com', 'Calle Ejemplo', '1999-08-09', 0)";
   
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Bryan Alexander
Val: 116
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problema al registrar en la base de datos

Publicado por Bryan Alexander (45 intervenciones) el 04/12/2019 15:12:43
Buenisimo, a lo que voy es desde tu PHP corriendo la misma sentencia y asginando a tus variables los valores directamente, solo para descartar en donde puede estar el problema, definitivamente si te deja insertar directo en la DB la DB no es el problema, sin embargo trata de hacerlo desde tu PHP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Álvaro
Val: 65
Ha disminuido su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al registrar en la base de datos

Publicado por Álvaro (12 intervenciones) el 04/12/2019 15:55:50
Deberé probarlo, pero por ejemplo, el atributo esAdministrador es igual a 0, por lo que estaría asignando ya un valor directamente, supongo que lo deberé probar con todos los atributos. Muchas gracias por tu respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al registrar en la base de datos

Publicado por Lawliet (351 intervenciones) el 04/12/2019 17:54:37
Hola!

No estoy seguro quien fue tu asesor de base de datos pero... QUE HACE UNA Ñ EN EL NOMBRE DE UN CAMPO!!!! Literal eso es pecado ¬_¬... De hecho si pones atención al error el mismo gestor de base de datos no reconoce el carácter por lo que en lugar de poner la letra como tal te pone el tradicional símbolo de carácter extraño.

Captura

Por la forma del código veo que no es error tuyo ya que eres consiente que caracteres especiales no están permitidos, me doy cuenta de ello por la siguiente línea.

1
$sentencia->bindParam(":contrasenya", $this->contrasenya, PDO::PARAM_STR);

Pero el que te haya ayudado con la base de datos tiene puntos menos por ese error. A continuación, te dejo una pequeña referencia de base de datos, donde menciona una de las buenas prácticas y/o reglas para modelado de base de datos.

Captura_2

No aseguro que sea el estándar universal, sin embargo, si te puedo asegurar que los caracteres especiales NO SON PERMITIDOS en lo que respecta a programación y base de datos.

Aplica un ALTER para cambiar el nombre del campo y has la prueba, por lo menos te aseguro que ya no tendrás errores de sintaxis.

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos! :3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Álvaro
Val: 65
Ha disminuido su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al registrar en la base de datos

Publicado por Álvaro (12 intervenciones) el 04/12/2019 20:51:10
¡Muchísimas gracias! Precisamente era eso. Creía que era un error mío por los alias que había puesto, pero era la ñ
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar