Programación Web y Scripting > PHP
procesar muchos ID tildados por un checkbox
DriverOp:
1)
Es un truco para evitar un problema de programación.
Para que entiendas el truco necesitarías hacer la prueba de escritorio (¿sabes qué es eso?).
El tema está en que para formar sintácticamente correcta la cláusula IN de SQL, el conjunto debe ser una lista de valores separados por coma y encerrada entre paréntesis.
Supongamos que el array $ids vale eso:
(0 => 1, 1 => 7, 2 => 8)
cuando entra al foreach recorre el array posición a posición concatenando cada posición en la variable $condicion, como bien has señalado dentro del foreach $condicion se va formando con un valor seguido de un espacio:
"1 7 8 "
Al final del foreach quedan los tres valores y tres espacios. Si reemplazara ahí mismo los espacios por comas me quedaría:
"1,7,8,"
Esa última coma causaría error de sintaxis en SQL. Para evitar eso antes de reemplazar los espacios por coma, uso trim() para quitar el último espacio:
"1 7 8"
Y luego del reemplazo me queda:
"1,7,8"
Lo cual es correcto.
2)
Ignoro qué está pasando. Recuerda que yo no tengo tu base de datos así que no puedo saber dónde está el problema. En mis tablas funciona perfectamente (de otra forma no te habría dado esta ayuda ;)).
F_Tanori:
El problema es que estas tomando id como una cadena de texto
--- Citar ---SELECT * FROM renovacion WHERE 'id' IN (5,7);
--- Fin de la cita ---
No da error porque es una sentencia valida,
para que te devolviera resultados seria lo siguiente:
--- Citar ---SELECT * FROM renovacion WHERE 'id' IN ('5','7','id');
--- Fin de la cita ---
Y no es el caso...
El codigo de DriverOp
utiliza el caracter (`) para los campos, el cual no es lo mismo que (')
--- Código: PHP --- $sql = "SELECT * FROM `clientes` WHERE `id` IN ".$condicion.";"; // La sentencia SQL
aunque incluso puedes omitir dicho caracter....
--- Código: PHP --- $sql = "SELECT * FROM clientes WHERE id IN ".$condicion.";"; // La sentencia SQL
Saludos
cesand:
mil mil graciassss...
era eso no mas F_tanori no sabia la diferencia entre esas comillas de ahora en adelante se tendra encuenta gracias a los dos entonces logre lo que buscaba. voy a buscar en google pero no tienen un buen link donde ver en su mayoria las sentencias sql ? por ejemplo esa sentencia IN no la conocia.
suerte amigos hasta la proxima :good:
F_Tanori:
Aqui hay unos quizas de utilidad
viewtopic.php?f=58&t=33343
http://mysql.conclase.net/
Saludos
DriverOp:
--- Cita de: "F_Tanori" ---El codigo de DriverOp
utiliza el caracter (`) para los campos, el cual no es lo mismo que (')
--- Fin de la cita ---
Buena observación :)
Hay cosas que uno por hacerlas tan repetitivas y sin pensar (obvias para uno), se le pasan a la hora de explicarle a alguien más.
Solo para clarificar terminología. "IN" no es una sentencia, es un operador dentro de una cláusula que está en una sentencia, la sentencia es SELECT y todo lo que le sigue. WHERE es la cláusula e "IN" es un operador de esa cláusula.
Navegación
[*] Página Anterior
Ir a la versión completa