Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con param en cláusula IN() en sentencia preparada

Estas en el tema de Problema con param en cláusula IN() en sentencia preparada en el foro de Mysql en Foros del Web. Buenas...Gracias de antemano al que pueda ayudarme. Mi problema está en la forma en que paso los parámetros a este SP. Si hago una consulta ...
  #1 (permalink)  
Antiguo 30/10/2013, 14:26
 
Fecha de Ingreso: marzo-2009
Ubicación: Rosario
Mensajes: 14
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Problema con param en cláusula IN() en sentencia preparada

Buenas...Gracias de antemano al que pueda ayudarme.
Mi problema está en la forma en que paso los parámetros a este SP.
Si hago una consulta normal me trae los resultados correctos, pero al solicitar los datos por medio de este SP sólo me trae 1 resultado.
Aclaro que desde php envío un string de este tipo: "225,226,227,228" para alimentar al parámetro Categories

GRACIAS!

Así tengo definidos los parámetros:
IN siteId int(10)
IN Categories text
IN Start1 int(10)
IN Limit1 int(10)

Código MySQL:
Ver original
  1.     SET @a = siteId;
  2.     SET @b = Categories;
  3.     SET @c = Start1;
  4.     SET @d = Limit1;
  5.    
  6.    
  7.     IF @c IS FALSE THEN
  8.     SET @c = 0;
  9.     END IF;
  10.  
  11.     IF @d IS FALSE THEN
  12.     SET @d = 18446744073709551615;
  13.     END IF;
  14.    
  15.     SET @query = '
  16.     SELECT *
  17.     FROM vw_Contents
  18.     WHERE idSite = ?
  19.     AND categoryId IN (?)
  20.     ORDER BY title
  21.     LIMIT ?,?';
  22.  
  23.     PREPARE stmt FROM @query;
  24.    
  25.     EXECUTE stmt USING @a, @b, @c, @d;
  26.     DEALLOCATE PREPARE stmt;
  #2 (permalink)  
Antiguo 17/11/2013, 07:33
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 13 años, 5 meses
Puntos: 42
Respuesta: Problema con param en cláusula IN() en sentencia preparada

Hola Josio,

Al hacer:
Código MySQL:
Ver original
  1. SET @a = 1;
  2. SET @b = '225,226,227,228';
  3. SET @c = 0;
  4. SET @d = 4;
  5.  
  6. SET @query = '
  7.    SELECT *
  8.    FROM vw_Contents
  9.    WHERE idSite = ?
  10.    AND categoryId IN (?)
  11.    ORDER BY title
  12.    LIMIT ?,?';
quedaría una consulta como la siguiente:
Código MySQL:
Ver original
  1. FROM vw_Contents
  2. WHERE idSite = 1
  3. AND categoryId IN ('225,226,227,228')
  4. ORDER BY title
  5. LIMIT 0,4;
Lo cual, efectivamente, retornaría probablemente un (1) registro como resultado.

Una opción es:
Código MySQL:
Ver original
  1. SET @query = CONCAT('
  2.    SELECT *
  3.    FROM vw_Contents
  4.    WHERE idSite = ?
  5.    AND categoryId IN (', @b, ')
  6.    ORDER BY title
  7.    LIMIT ?,?');
  8.  
  9. PREPARE stmt FROM @query;
  10. EXECUTE stmt USING @a, @c, @d;
  11. DEALLOCATE PREPARE stmt;
La consulta quedaría, algo como:
Código MySQL:
Ver original
  1. FROM vw_Contents
  2. WHERE idSite = 1
  3. AND categoryId IN (225,226,227,228)
  4. ORDER BY title
  5. LIMIT 0,4;

Etiquetas: php, select, sentencia
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 23:00.