0

Les agradecería mucho que me ayudaran. Gracias. Error completo:

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\xampp\htdocs\empresa\empleados\empleados.php on line 20.

Imagen de la tabla "usuarios" Código de conexión

include ("../conexion/conexion.php");

switch($accion){
    case "Agregar":

        $sentencia=$pdo->prepare("INSERT INTO usuarios(Nombre,Correo,Contraseña,Menu)
        VALUES (:Nombre,:Correo,:Contraseña,:Menu) ");

        $sentencia->bindParam(':Nombre',$Nombre);
        $sentencia->bindParam(':Correo',$Correo);
        $sentencia->bindParam(':Contraseña',$Contraseña);
        $sentencia->bindParam(':Menu',$Menu);
        $sentencia->execute();

        echo $Nombre;
        echo "Agregar";
    break;

    case "Cancelar":
    break;
}
?>
  • Hola @Ana, podrías subir una imagen de la tabla `usuarios`?, el error se encuentra en su consulta preparada. También, debería evitar caracteres como la "ñ". – Moisés Huamán C. Mar 09 '20 at 18:45
  • Es muy probable que la `ñ` te esté dando problemas, deberías evitar `ñ` y acentos en nombres de tablas, columnas y variables. Muestra cómo te conectas a PDO en el archivo `conexion.php`, para sugerirte una configuración con charset adecuado. Si no se arregla con eso vas a tener que establecer el charset también en el HTML y a veces incluso en los datos mismos. – A. Cedano Mar 09 '20 at 18:47
  • Te recomiendo encarecidamente que cambies el nombre de la columna `Contraseña` por algo como `Password` por ejemplo. Si tu BD ya está en producción (en uso en alguna parte) toma las medidas de lugar antes de hacerlo, como cambiar el código donde quiera que consultes a esa tabla. Luego, en tus archivos, cambia las consultas, usando `Password`, e igualmente cambia la variable de PHP `$Contraseña` por `$Password`. De todos modos, conviene que controles la codificación, usando en todos los nivles `utf8` . – A. Cedano Mar 09 '20 at 18:53
  • Para el código de la conexión en vez de una imagen pon el texto. La imagen no se puede reproducir para ayudarte con una mejora del código. – A. Cedano Mar 09 '20 at 18:55
  • El error dice que está queriendo enviar un parámetro numérico mientras que en sus tablas solo tiene campos que admiten `varchar` o cadenas de texto, Trate de revisar el envío de sus datos. – Moisés Huamán C. Mar 09 '20 at 18:57
  • @MoisésHuamánC. no, el error es: *`Invalid parameter number: parameter was not defined`* Ese error dice textualmente: **número inválido de parámetros** y es porque el dato con `ñ` no lo reconoce como parámetro debido sin duda a fallos en la codificación que producen caracteres extraños que dañan el código. He visto este error más de una vez. Si se evita el uso de `ñ` y/o se establece una codificación adecuada en todos los niveles: HTML/PHP, Conexión, Datos en las BD... el error desaparece. El problema ha sido tratado ampliamente [en esta respuesta](https://es.stackoverflow.com/a/59510/29967). – A. Cedano Mar 09 '20 at 18:59
  • Muchas gracias, efectivamente era la "ñ" la causante de mi error. Muchas gracias a todos! – Ana Laura Amador Romero Mar 09 '20 at 19:05
  • De todos modos, deberías configurar tu entorno de modo que la `ñ` no te cause problemas. Hay casos en los que no se puede evitar la `ñ`, por ejemplo en datos como apellidos, y lo mismo pasa con los acentos. [Revisa esta respuesta](https://es.stackoverflow.com/a/59510/29967) donde se explica con detalle cómo configurar el entorno global para que los acentos no te den problemas. Saludos. – A. Cedano Mar 09 '20 at 19:09
  • @A.Cedano Cierto, equivocación mía, entonces después de todo el error radicaba en la "ñ". Gracias. – Moisés Huamán C. Mar 09 '20 at 20:09
  • Me alegro de que lo hayas resuelto. Saludos. – A. Cedano Mar 09 '20 at 20:11

0 Answers0