PHP - Concatenar comillas simples en variable para consulta

 
Vista:
sin imagen de perfil

Concatenar comillas simples en variable para consulta

Publicado por Joaquín (9 intervenciones) el 12/04/2017 14:03:08
Tengo un problema que me ha atascado y por muchas vueltas que le doy no lo saco. Es el siguiente:
Tengo una consulta que podríamos resumir como sigue:
1
2
3
4
5
6
7
8
$result = mysql_query('SELECT id_cliente, nombre, tipo, precio, icono1, localidad
                     FROM lastminute
                     WHERE  tipo  =  "Tapas y comida rápida" ');
Y funciona correctamente. Pero si hago lo siguiente:
$tipos = "Tapas y comida rápida";
$result = mysql_query('SELECT id_cliente, nombre, tipo, precio, icono1, localidad
                     FROM lastminute
                     WHERE  tipo  =  '  .  $tipos  .  ' ');
Da error, si alguien puede explicarme porqué se lo agradecería.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Concatenar comillas simples en variable para consulta

Publicado por Luis (1 intervención) el 12/04/2017 14:10:20
1
2
3
$result = mysql_query('SELECT id_cliente, nombre, tipo, precio, icono1, localidad
FROM lastminute
WHERE tipo = ' . $tipos . ' ');

Si te fijas al final de esta sentencia tienes dos comillas simples cuando solo deberia estar una.

Ten cuidado con este tipo de concatenaciones porque tu aplicación puede sufrir una InjectionSQL, trata de no concatenar y parametriza las consultas, de esta manera evitaras ataques SQL.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Concatenar comillas simples en variable para consulta

Publicado por kip (877 intervenciones) el 12/04/2017 14:26:24
Hola, puedes solucionarlo de varias formas, lo importante al final es tener este resultado:

1
2
3
SELECT id_cliente, nombre, tipo, precio, icono1, localidad
FROM lastminute
WHERE tipo = "Tapas y comida rápida"

Si te fijas tienes que tener el valor con el que evaluaras entre comillas ! Ya que de esa forma se interpretara como una cadena....

Concatenar:

1
2
3
4
5
6
7
$tipos = "Tapas y comida rápida";
 
$result = 'SELECT id_cliente, nombre, tipo, precio, icono1, localidad
FROM lastminute
WHERE tipo = "' . $tipos . '"';
 
mysql_query($result);

Usar dobles comillas para que muestre el valor las variables dentro del string:

1
2
3
4
5
6
7
$tipos = "Tapas y comida rápida";
 
$result = "SELECT id_cliente, nombre, tipo, precio, icono1, localidad
FROM lastminute
WHERE tipo = '$tipos'";
 
mysql_query($result);

Usar sprintf():

1
2
3
4
5
6
7
$tipos = "Tapas y comida rápida";
 
$result = sprintf('SELECT id_cliente, nombre, tipo, precio, icono1, localidad
FROM lastminute
WHERE tipo = "%s"', $tipos);
 
mysql_query($result);

Hay un par mas pero creo que alguna de las anteriores debe ayudarte.

Por cierto es mejor dejar de usar la extension mysql para conectar a una base de datos, deberia usarse mysqli ya que este ultimo es el reemplazo mejorado de mysql y es compatible con nuevas versiones de PHP, la anterior esta obsoleta desde la version 5.5 creo y eliminada en la 7!

http://php.net/manual/es/book.mysqli.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Concatenar comillas simples en variable para consulta

Publicado por Joaquín (9 intervenciones) el 12/04/2017 17:34:55
Muchas gracias, al final he utilizado: WHERE tipo = "' . $tipos . '"'; y funciona de maravilla. Las otras las he descartado por la complejidad de cambiar toda la consulta que es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$result = mysql_query('SELECT id_cliente, nombre, tipo, precio, icono1, localidad, (6371 * ACOS(
            SIN(RADIANS(lat)) 
            * SIN(RADIANS(' . $latitud . '))
            + COS(RADIANS(lng - ' . $longitud . '))
            * COS(RADIANS(lat)) 
            * COS(RADIANS(' . $latitud . '))
            )
       ) AS distance
     FROM lastminute
     WHERE (lat BETWEEN ' . $box['min_lat']. ' AND ' . $box['max_lat'] . ')
     AND (lng BETWEEN ' . $box['min_lng']. ' AND ' . $box['max_lng']. ')
	 AND  tipo  =  "' . $tipos . '"
	 AND activo = 1
	 AND (promo != " " OR promo != null) 
     HAVING distance  < ' . $distanciausuario . '
     ORDER BY distance ASC ');
En cuanto a utilizar mysqli estoy de acuerdo contigo, pero vengo arrastrando mysql desde atrás y me tengo que poner a cambiar un montón de php, así que en cuanto tenga tiempo lo hago, que llevo pensándomelo medio año y me da vaguería, pero lo voy a tener que hacer tarde o temprano.
Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar