Foros del Web » Programando para Internet » PHP »

diferencia entre comillas por favor

Estas en el tema de diferencia entre comillas por favor en el foro de PHP en Foros del Web. por que cuando yo ha go una consulta con la varible entrecomillada $consulta= mysql_query ("SELECT * FROM tabla WHERE cod='".$_POST['RefPedido']."'") or die (header( "Location: $pag?erren=0")); ...
  #1 (permalink)  
Antiguo 19/06/2003, 06:11
 
Fecha de Ingreso: febrero-2003
Mensajes: 93
Antigüedad: 14 años, 9 meses
Puntos: 0
diferencia entre comillas por favor

por que cuando yo ha go una consulta con la varible entrecomillada

$consulta= mysql_query ("SELECT * FROM tabla WHERE cod='".$_POST['RefPedido']."'")
or die (header( "Location: $pag?erren=0"));

no salta el die cuando esta mal y si la pon sin comillas

$consulta= mysql_query ("SELECT * FROM tabla WHERE cod=$_POST['RefPedido']")
or die (header( "Location: $pag?erren=0"))

si que me coge el die. ¿ que diferencia hay?

Muchas gracias
  #2 (permalink)  
Antiguo 19/06/2003, 06:33
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
Fijate como realizas las consultas, no sacas lo mismo ,en una haces:

"SELECT * FROM tabla WHERE cod='$_POST['RefPedido']""

Eso esta bastante mal

La siguiente esta bien

"SELECT * FROM tabla WHERE cod=$_POST['RefPedido']"

Por que lo k hace PHP al encontrar algo entre comillas dobles interpreta los datos, es decir en ese caso te interpreta la variable y si no es correcto te salta el error.
__________________
Usuario registrado de Linux #288725
  #3 (permalink)  
Antiguo 19/06/2003, 06:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

En primer lugar, el die() solo se ejecuta cuando mysql_query() devuelve false, y eso solo ocurre si se produce un error de MySQL, normalmente un fallo de sintaxis o que no existe la tabla/campos de la consulta. Que es lo que ocurre de todas todas en tu segundo ejemplo, ya que no puedes poner asi el array dentro de una cadena. Siempre tendra mala sintaxis la consulta. La forma correcta seria poner el indice sin ' o usar {}.

Yo ademas no usaria el die() para lanzar la redireccion, sino que usaria un if. El die() lo dejaria para mostrar un mensaje (por ejemplo, el mensaje de error que devuelve MySQL).

Resumiendo, el die() no se ejecutara a no ser que no exista la tabla 'tabla' o el campo 'cod' (o no hayas hecho bien la conexion a la BD).

Es que no entiendo con eso de "esta mal".

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 19/06/2003, 06:38
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
SI josemi tiene razon yo me referia a k esta bien el

"SELECT * FROM tabla WHERE cod=$_POST{['RefPedido']}"
__________________
Usuario registrado de Linux #288725
  #5 (permalink)  
Antiguo 19/06/2003, 07:11
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Yo lo uso asi

"SELECT * FROM tabla WHERE cod={$_POST['RefPedido']}"

Aun asi lo que mas me preocupa de la pregunta es que no se si estara intentando usar el die() para el caso en que la consulta no devuelva ningun registro. Si es eso lo que pretendes RuBiO, eso se hace con la funcion mysql_num_rows().

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 19/06/2003, 07:23
 
Fecha de Ingreso: febrero-2003
Mensajes: 93
Antigüedad: 14 años, 9 meses
Puntos: 0
el die lo intento usar para cuando no ha encontrado el campo cod es decir en el WHERE
  #7 (permalink)  
Antiguo 19/06/2003, 07:27
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Pues amigo mio, como ya he comentado antes, eso no se hace asi. Creo que lo he explicado en los mensajes, pero si tienes alguna duda pregunta.

Saludos.

PD: mira en el manual www.php.net/mysql-num-rows los ejemplos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 19/06/2003, 07:35
 
Fecha de Ingreso: febrero-2003
Mensajes: 93
Antigüedad: 14 años, 9 meses
Puntos: 0
De acuerdo muchas gracias lo hare así, sin embargo he probado como me habeis dicho {$_POST['RefPedido']} e incluso sin {} pero nunca me enseñaba el resultado sino que me hacia el die, solamente logro que me enseñe el resultado con '".$_POST['RefPedido']."' asi que si lo pongo de esta manera y luego un if (mysql_num....
me deberia de salir no?

Gracias
  #9 (permalink)  
Antiguo 19/06/2003, 07:43
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hombre si cod es un campo de tipo texto debes poner ' con los {}, igual que cuando concatenas. ASi:

"SELECT * FROM tabla WHERE cod='{$_POST['RefPedido']}'"

Lo que pasa es que lo puse sin ' porque yo suelo usar campos numericos.

Y si, deberia funcionar con el if (mysql_num_rows() ...

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 19/06/2003, 07:59
 
Fecha de Ingreso: febrero-2003
Mensajes: 93
Antigüedad: 14 años, 9 meses
Puntos: 0
efectivamente lo he puesto asi '{$_SESSION['Cod_cliente']}'
y asi
'$_SESSION[Cod_cliente]'
e incluso asi
'".$_SESSION['Cod_cliente']."'
(¿CUAL ES MAS SEGURA?)
y de las tres formas funciona lo que me pasa es que no encuentro la diferencia entre las tres y siempre me hago un lio existe por hay algun articulo sobre el "'maravilloso mundo de las comillas"' o algo asi

Muchisimas gracias y siento haber sido tan pesao pero es que siempre acabo haciendome un lio con las consultas y demas gracias a esto

PD: es un campo alfanumerico
  #11 (permalink)  
Antiguo 19/06/2003, 12:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
"'maravilloso mundo de las comillas"' o algo asi
Lo tienes ni mas ni menos que en el manual oficial de PHP de referencia en su tema de introducción de "Strings" (cadenas):

http://www.php.net/manual/en/language.types.string.php


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 20/06/2003, 02:56
 
Fecha de Ingreso: febrero-2003
Mensajes: 93
Antigüedad: 14 años, 9 meses
Puntos: 0
Gracias le hechare un vistazo
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 21:03.