Foros del Web » Programando para Internet » PHP »

error al preparar consulta DESCRIBE (mysqli)

Estas en el tema de error al preparar consulta DESCRIBE (mysqli) en el foro de PHP en Foros del Web. Hola de nuevo, tengo un problema al querer preparar una consulta con mysqli. la consulta que quiero preparar es esta: DESCRIBE ? y recibo este ...
  #1 (permalink)  
Antiguo 11/10/2013, 10:32
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
error al preparar consulta DESCRIBE (mysqli)

Hola de nuevo, tengo un problema al querer preparar una consulta con mysqli.

la consulta que quiero preparar es esta: DESCRIBE ?
y recibo este error:
Cita:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1
si, en cambio, intento preparar esta otra: DESCRIBE nombreTabla funciona bien y anda 10 puntos. pero lo que quiero hacer es bindearle el nombre de la tabla a la consulta y me falla al intentar prepararla.

¿Acaso con describe hay que usar otra sintaxis o no aplica lo de bindear parametros a esta sentencia?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 11/10/2013, 10:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: error al preparar consulta DESCRIBE (mysqli)

El problema básico es que DESCRIBE no es exactamente una sentencia, sino un comando de MySQL... Es decir, no puede ser preparado como sentencia, porque no lo es. Es un comando de la misma categoría (aunque para otro uso) que el EXPLAIN y el GRANT.
PREPARE está definido para sentencias DDL, pero no para las DML ni las DCL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/10/2013, 10:55
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: error al preparar consulta DESCRIBE (mysqli)

Gracias por la respuesta, pero, si es como tu dises que no puede ser preparado, porque cuando uso: DESCRIBE nombreTabla si la prepara bien y la ejecuta sin problemas? acaso al recibir consultas DML o DCL las intenta ejecutar como vienen directamente y por eso no procesa el "?" ?

Si es asi, que alternativa tengo para bindearle el nombre de la tabla?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 11/10/2013, 11:03
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: error al preparar consulta DESCRIBE (mysqli)

tambien probe a preparar esto: SHOW COLUMNS FROM ? pero pasa lo mismo
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 11/10/2013, 11:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: error al preparar consulta DESCRIBE (mysqli)

Son comandos DCL. No aceptan parametrizaciones.

No le des vuelta al asunto.

Pregunta: ¿Para qué quieres preparar ese tipo de comandos?
No es buena idea dar acceso a comandos de control administrativo a usuarios que no sean los DBA... Es sumamente peligroso.

¿Qué se supone que quieres hacer?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 11/10/2013, 11:25
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: error al preparar consulta DESCRIBE (mysqli)

Estoy creando una clase para manejar la base de datos de forma abstracta. Cuando se crea una instancia de esta clase en el constructor va el nombre de la tabla con la que trabajara esa instancia. el constructor levanta con describe la estructura y en base a eso define con que va a buscar en cada campo (si se va a usar = o si se va a usar LIKE) segun el tipo de dato y la clave que tenga el campo.

los parametros de los constructores estan definidos en el programa, ningun usuario tiene acceso y se supone que los programadores no pondran ninguna "cosa rara" ahi, no tendria sentido, pero si se podia bindear mucho mejor
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 11/10/2013, 11:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: error al preparar consulta DESCRIBE (mysqli)

En ese caso, al menos en MySQL, te conviene analizar ese tipo de cosas desde la base information_schema, que es donde están todos los descriptores de cada cosa (tablas, bases, columnas, indices, etc).
En ese caso, sí podrías usar sentencias preparadas parametrizables.
Como comentario, las herramientas que manejan las bases en la forma que describes, en el caso de MySQL, toman los datos de esa base, precisamente.
Base de datos INFORMATION_SCHEMA

En una ocasión tuve que preparar un proceso que verificara la base para asegurarme que no sufriera modificaciones, así como otro que verificara si se debían aplicar cambios si la versión de la base era obsoleta.
Todos los procesos que preparamos se realizaron con ese esquema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 11/10/2013, 13:53
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: error al preparar consulta DESCRIBE (mysqli)

Código SQL:
Ver original
  1. DESCRIBE ?
  2. SHOW COLUMNS FROM ?

No funcionan por que el prepare escapa datos y esos deben ser valores y no nombres de tablas o campos, porque:

DESCRIBE ?, donde ? sea reemplazado por usuarios quedaría:

DESCRIBE 'usuarios'

Los nombres de bases de datos, tablas y campos puedes encerrarlos entre ``, pero no entre comillas simples... pruébalo en PhpMyAdmin para confirmarlo.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: mysql, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:30.