Foros del Web » Programando para Internet » PHP »

variables en sentencias SQL

Estas en el tema de variables en sentencias SQL en el foro de PHP en Foros del Web. Estoy buscando el modo de pasar un valor por variabple a una sentencia sql... digamos: <?php $p=4; ... $query = "SELECT * FROM dtabla WHERE ...
  #1 (permalink)  
Antiguo 06/12/2004, 13:12
Avatar de morfeo1002  
Fecha de Ingreso: julio-2002
Mensajes: 65
Antigüedad: 21 años, 9 meses
Puntos: 0
variables en sentencias SQL

Estoy buscando el modo de pasar un valor por variabple a una sentencia sql...

digamos:

<?php
$p=4;
...
$query = "SELECT * FROM dtabla WHERE id=¿?";
...
?>

cómo construyo esa sentencia de modo correcto?

Saludos

Morfeo
  #2 (permalink)  
Antiguo 06/12/2004, 13:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Olvidate de que es una "sentencia SQL" .. mira a tu sentencia SQL como una cadena/string .. así que toda variable que quieras usar .. tratalo como cadenas que son para PHP (cuando las ejecute tu xxx_query() ya significarán algo para tu BD . .mientras tanto para PHP son "cadenas").

Código PHP:
$query "SELECT * FROM dtabla WHERE id='".$p."'"
Eso sí, respeta la sintax SQL y verifica que es lo que esperas haciendo un:
echo $query;

Un saludo,
  #3 (permalink)  
Antiguo 06/12/2004, 14:10
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola a todos.

Una duda. Poniendo el código:
Código PHP:
$query "SELECT * FROM dtabla WHERE id='$p'"
y haciendo, como propone Cluster echo $query, creo que también queda correcto. ¿Hay alguna diferencia importante entre los dos códigos?

Gracias por vuestra ayuda. Saludos,
  #4 (permalink)  
Antiguo 06/12/2004, 14:17
 
Fecha de Ingreso: noviembre-2004
Mensajes: 176
Antigüedad: 19 años, 5 meses
Puntos: 0
prueba haciendo un echo $query (solo debug), y veras si existe alguna diferencia !!, por lo que tengo entendido php reemplaza automaticamente el valor '$p' dentro de la cadena y quedara igual que si la concatenas con .$p.
  #5 (permalink)  
Antiguo 06/12/2004, 14:20
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 11 meses
Puntos: 2
Pues en principio no hay diferencias puesto que php pone el valor de la variable. El problema está cuando la cadena está entre comillas simples ya que php no lo interpreta como una variable sino como un literal: ej :
$variable="hola";
$mensaje='esto es una prueba: $variable';

un echo $mensaje daría:

esto es una prueba: $variable
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #6 (permalink)  
Antiguo 06/12/2004, 14:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo uso la sintax que puse más arriba usando concatenación (el punto) por qué entre otras cosas .. si se fijan al colocerar el código un editor de código común (o las funciones de PHP como aquí se vé claramente) se ve al instante donde está la "variable" y lo que es el resto de la cadena (sentencia SQL).

Un saludo,
  #7 (permalink)  
Antiguo 06/12/2004, 16:05
Avatar de morfeo1002  
Fecha de Ingreso: julio-2002
Mensajes: 65
Antigüedad: 21 años, 9 meses
Puntos: 0
Gracias Cluster por tus apreciaciones. Gracias también a los demás foristas por la diversidad de criterios. En mis andanzas por manuales y tutoriales, encontré otra forma optativa de hacerlo:

$query = sprintf("SELECT * FROM dtabla WHERE id=%s",$p);

Creo que aquí también queda bien definida la variable, al igual que la cadena.

Que todo sea por la riqueza del conocimiento

Saludos,

Morfeo
  #8 (permalink)  
Antiguo 07/12/2004, 04:42
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Gracias, living y Cluster por vuestras aclaraciones. Muy interesante el ejemplo de living con comillas simples, no sabía que existía esa diferencia.

Saludos,
  #9 (permalink)  
Antiguo 07/12/2004, 07:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por morfeo1002
Gracias Cluster por tus apreciaciones. Gracias también a los demás foristas por la diversidad de criterios. En mis andanzas por manuales y tutoriales, encontré otra forma optativa de hacerlo:

$query = sprintf("SELECT * FROM dtabla WHERE id=%s",$p);

Creo que aquí también queda bien definida la variable, al igual que la cadena.

Que todo sea por la riqueza del conocimiento

Saludos,

Morfeo
En ese caso .. el uso de la función printf() usa el motor de expresiones regulares de PHP .. es decir .. algo más de carga de proceso para una taréa simple de sustitución de unas varaibles en un patrón extremadamente simple.

Printf() va muy bien para otro tipo de patrones más complejos para sustituciones en cadenas .. Pero para el caso dado .. concatenar, usar comilllas adecuadas y poco más es lo que se requiere y más optimo a nivel de rendimiento del script. A su vez "facilita" la "lectura" del código .. no hay que "pensar" que cada %s indica por orden las subsiguientes cadenas a sustituir o saber que es el "s" pues hay más parámetros que define ese tipo de patrones.

Un saludo,
  #10 (permalink)  
Antiguo 07/12/2004, 16:06
Avatar de morfeo1002  
Fecha de Ingreso: julio-2002
Mensajes: 65
Antigüedad: 21 años, 9 meses
Puntos: 0
Cita:
Iniciado por living
Pues en principio no hay diferencias puesto que php pone el valor de la variable. El problema está cuando la cadena está entre comillas simples ya que php no lo interpreta como una variable sino como un literal: ej :
$variable="hola";
$mensaje='esto es una prueba: $variable';

un echo $mensaje daría:

esto es una prueba: $variable

viendo entonces la acotación de Living me asalta una duda:

Cómo crear entonces la concatenación para que php lo interprete de igual forma siempre?

  #11 (permalink)  
Antiguo 07/12/2004, 16:29
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cita:
Iniciado por morfeo1002
viendo entonces la acotación de Living me asalta una duda:

Cómo crear entonces la concatenación para que php lo interprete de igual forma siempre?
No entiendo del todo bien tu pregunta.
Código PHP:
$miVariable "valorvariable";
//Con comillas dobles, se interpreta la variable:
echo "Mi variable es : $miVariable"// dará: mi variable es : valorvariable
//Con comillas simples no se interpreta:
echo 'Mi variable es : $miVariable'// dará: mi variable es $miVariable 
Yo suelo concatenar de la misma manera en que ya lo puso Cluster y por las mismas razones:
Código PHP:
echo "Mi variable es : ".$miVariable
En realidad estoy casi repitiendo todo lo que ya te pusieron... pero no sé qué es lo que no te queda laro.

Saludos
  #12 (permalink)  
Antiguo 07/12/2004, 16:42
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
También hay que tener en cuenta si se necesita que el valor de la variable vaya entre comillas simples (como es usual para valores de campos no numéricos en mySQL) lo siguiente:
Código PHP:
$sql "SELECT * FROM tabla WHERE campo='$valor'"
Si miramos rápidamente podríamos llegar a pensar que la variable $valor no debería interpretarse porque está entre comillas simples... pero estaríamos equivocados.
La cadena está delimitada (al comienzo) por comillas dobles y sólo se cerrará cuando encuentre otras comillas dobles (al final).... todo lo que esté entre ellas será tomado como parte de la cadena.... por lo tanto la comillas simples que están antes y después de $valor son un caracter más y no se toman como límite de la cadena... por lo que no afectan a la variable $valor.

Saludos
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 08:35.