Foros del Web » Programando para Internet » PHP »

Variables en el Query

Estas en el tema de Variables en el Query en el foro de PHP en Foros del Web. buenas; No sé si este mensaje debe ir aquí o en el foro de Bases de datos. El caso es que realizo una consulta para ...
  #1 (permalink)  
Antiguo 23/07/2003, 05:41
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Variables en el Query

buenas;

No sé si este mensaje debe ir aquí o en el foro de Bases de datos.

El caso es que realizo una consulta para una base de datos Mysql y se que para insertar variables de php debo poner estas entre comillas para que la sentencia SQL no equivoque las variables con los campos de la DB.

Pero hoy me ha ocurrido algo que no me esperaba, realizé la siguiente consulta:

$result=mysql_query("select DOMINIO, DIA_ALTA, MES_ALTA, YEAR_ALTA, DIA_VENCIMIENTO, MES_VENCIMIENTO, YEAR_VENCIMIENTO, TIPO, ID_CLIENTE from DOMINIOS order by '$orden' '$ori' ", $link)or die (mysql_error());

con el fin de que dependiendo de la variable $orden y $ori se ordenasen los resultados ($ori es para la orientación ASC o DESC). Pero me tomaba la variable de $orden pero no la de $ori, hasta que se me ocurrió quitarle las comillas simples a esta última y entonces sí que me lo interpretaba bien ¿?.

Quedó así:
$result=mysql_query("select DOMINIO, DIA_ALTA, MES_ALTA, YEAR_ALTA, DIA_VENCIMIENTO, MES_VENCIMIENTO, YEAR_VENCIMIENTO, TIPO, ID_CLIENTE from DOMINIOS order by '$orden' $ori ", $link)or die (mysql_error());

¿Podrían decirme porqué ocurre esto?

Gracias.
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #2 (permalink)  
Antiguo 23/07/2003, 05:48
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Bueno, supongo que es porque la sintaxis es sin las comillas. Es mas, creo que el nombre del campo tambien puede ser sin comillas (asi lo hago yo). Es decir, esto

ORDER BY campo 'ASC'

no tiene sintaxis correcta. Sin mas. Lo mismo que posiblemente tampoco entienda:

'ORDER BY' campo

La sintaxis es asi y punto. Es la sintaxis de MySQL, no la de PHP.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 23/07/2003, 05:49
Avatar de kco
kco
 
Fecha de Ingreso: septiembre-2001
Mensajes: 249
Antigüedad: 22 años, 6 meses
Puntos: 0
Has probado a poner una coma , entre las dos variables


by ' $orden',' $ori'

Un saludo de un PHPero+
kco

  #4 (permalink)  
Antiguo 23/07/2003, 05:58
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
kco, no pretende ordenar por 2 campos. Las variables son una el nombre del campo y la otra el "sentido" de la ordenacion (ASC o DESC).

Por cierto, ferent
Cita:
El caso es que realizo una consulta para una base de datos Mysql y se que para insertar variables de php debo poner estas entre comillas para que la sentencia SQL no equivoque las variables con los campos de la DB.
No entiendo lo de que deben ir las variables entre comillas. Eso no es cierto. Si pones ' dentro de la cadena delimitada por ", la salida tendra esas '. Las ' las debes poner si asi lo requiere la sintaxis SQL, como en el caso de los valores de texto. Pero tanto si usas variables PHP como si pones el texto directamente. Es decir, podiras poner perfectamente:
Código PHP:
$result=mysql_query("select DOMINIO, DIA_ALTA, MES_ALTA, YEAR_ALTA, DIA_VENCIMIENTO, MES_VENCIMIENTO, YEAR_VENCIMIENTO, TIPO, ID_CLIENTE from DOMINIOS order by $orden $ori "$link)or die (mysql_error()); 
sin ningun problema (siempre que por lo menos $orden tenga un nombre de campo valido).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 23/07/2003, 06:14
Avatar de kco
kco
 
Fecha de Ingreso: septiembre-2001
Mensajes: 249
Antigüedad: 22 años, 6 meses
Puntos: 0
ok i'm sorry tienes razon entendi mal pregunta
para mi

para ti josemi

Un saludo de un PHPero+
kco



Que raro tanto español en un post
  #6 (permalink)  
Antiguo 23/07/2003, 09:01
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
¿Osea, que NUNCA hace falta poner las comillas?

No lo he probado, pero cómo sabe la sentencia SQL que no estoy llamanto a un campo de la DB que se llame p.e $cliente?

osea, supongamos que yo tengo un campo en la DB (puesto a mala leche) $cliente y otro cliente, y hago esto:

mysql_query("UPDATE CLIENTES SET CLIENTE=$cliente where ID_CLIENTE=$id_cliente",$link) or die(mysql_error());

¿y si no tengo definida la variable cliente la consulta tomaría el campo de la DB $cliente pero si sí la tengo definida en la página me toma el que yo le doy?
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #7 (permalink)  
Antiguo 23/07/2003, 14:52
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
No. Aqui hay 2 pasos. Primero PHP parsea la cadena y sustituye las variables PHP por sus valores. En el segundo paso, se envia esa cadena con los valores a MySQL que ejecuta esa cadena. Es mas, yo te recomendaria que siempre hicieses esto:
Código PHP:
$consulta="SELECT * FROM tabla";
$result=mysql_query($consulta); 
Es decir, meter la consulta en una variable PHP y pasar esa variable como el parametro a mysql_query(). Asi esta mas claro que lo que realmente mandas a MySQL es la cadena despues de que PHP sustituya las variables por sus valores.

Espero haber aclarado algo.

PD: Ademas, asi a la hora de depuracion puedes hacer un echo $consulta; y ver el texto exacto de la consulta que ejecuta MySQL.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 24/07/2003, 02:04
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Así lo haré, Josemi, cuan grande eres!!
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
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 19:27.