0

En la siguiente programación tengo un problema ya que a pesar de que las variables tengan valores (comprobados mediante "echo"), al realizar el mysqli_query me devuelve un "INVALID QUERY" pero no me da inguna información más.

$consulta="
INSERT INTO '$tablaPreguntas'(modalidadPregunta,numeroPregunta,preguntaTest,respuestaLetra,aRespuesta,bRespuesta,cRespuesta,dRespuesta)
VALUES ('$modalidadPregunta','$numeroPregunta','$preguntaPregunta','$letraPregunta','$Apregunta','$Bpregunta','$Cpregunta','$Dpregunta')
";

$result = mysqli_query($con,$consulta);
    if (!$result) {
    die('Invalid query: ' . mysqli_error());
    echo "Error al insertar";
    }

No imprime "Error al insertar" símplemente "Invalid query:" sin más información.

ret
  • 1,818
  • 2
  • 13
  • 37
  • 1
    porque segun el [manual](http://php.net/manual/es/function.die.php) die es como hacer exit. Nada se ejecuta despues de eso. – gbianchi Jan 18 '19 at 22:23
  • ¿Y por qué no dice cual es el mysqli_error? – ret Jan 18 '19 at 22:26
  • Eso no lo se... prueba hacer un echo de ese texto y sacar el die a ver si realmente tiene algo... – gbianchi Jan 18 '19 at 22:28
  • Si no te imprime el error puede ser porque la misma conexión es nula. Podrás saberlo muy fácilmente: `if ($con) { //aquí todo tu código } else { echo "La conexión es nula"; }` Para más seguridad, puedes también pasarle la conexión a la función así: `mysqli_error($con)` – A. Cedano Jan 18 '19 at 22:43
  • Añadiendo if($con){echo "Hay conexion";} else{echo "No hay conexion";} Me devuelve Hay conexion. Parece que la conexión está bien. – ret Jan 18 '19 at 22:50
  • ¿En la consulta las variables se concatenan así, verdad? En muchas otra lo he hecho igualito, o prácticmanente igual. – ret Jan 18 '19 at 22:51
  • 1
    Sí, pero las columnas numéricas no deberían llevar comillas alrededor. Tampoco pondría comillas al nombre de la tabla, a no ser que sea una palabra reservada, en cuyo caso usaría *backticks*. De todos modos, debería imprimir el error. Prueba a quitar el dichoso `die`, poniendo simplemente un `echo`, con el mensaje de error que debería generar la API mysqli. Si fuera tú no usaría `die`, eso es del siglo pasado. – A. Cedano Jan 18 '19 at 23:00
  • Por cierto, le pasaste la conexión en parámetro a la función: `mysqli_error($con)`. [El Manual de PHP](http://php.net/manual/es/mysqli.error.php) **NO dice que ese parámetro sea opcional**, yo veo que lo omites en tu código y no sé por qué. – A. Cedano Jan 18 '19 at 23:15
  • El motivo del error era el indicado por A.Cedano. Por motivo de que $numeroPregunta (que lo tenía con comillas) es numérico y la base de datos no admitía uno que no fuera smallint. Muchas gracias a todos. Os invitaba a un café a todos, es el típico error que le das vueltas y vueltas a la cabeza vayas donde vayas, y no se te ocurre el motivo. – ret Jan 18 '19 at 23:25
  • 2
    De todos modos, para evitar este tipo de errores y al mismo tiempo *parchear* tu código, corrigiendo la vulnerabilidad de inyección SQL, lo mejor es que implementes consultas preparadas, evitando así pasar los valores directamente en la consulta. Esos valores pueden ser manipulados [para inyectar código destructivo en tu sistema](https://es.stackoverflow.com/q/108520/29967) o para borrar tablas enteras de la base de datos. – A. Cedano Jan 18 '19 at 23:37

0 Answers0