🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: chile.comp.programacion
11 messages
11 total messages Started by T_Q_LEO Mon, 14 Aug 2006 16:17
Script en PHP
#1422
Author: T_Q_LEO
Date: Mon, 14 Aug 2006 16:17
29 lines
1901 bytes
Saludos:

En mi script de PHP poseia la siguiente instruccion para consultar datos de
una base MYSQL:

"select * from lider where MONTH(FROM_UNIXTIME(fecha))='$mescons' and
YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
".$st.",".$pp;

Dicha instrucci�n funcionaba sin problemas, pero luego me di cuenta de que
debia realizar un filtrado m�s y agregue el siguiente parametro
cliente='$empresa' quedando la instruccion como sigue:

select * from lider where cliente='$empresa' and
MONTH(FROM_UNIXTIME(fecha))='$mescons' and
YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
".$st.",".$pp;

Por una extra�a raz�n dicha consulta no me arroja ningun resultado, he
intentado colocar el parametro de cliente en otras partes de la instruccion
pero aun asi no me da resultados.

Espero puedan orientarme a encontrar una solucion a mi problema.

Agradeciendo de antemano se despide atentamente,

-- 
Ricardo Carcass�n
Santiago - Chile
Re: Script en PHP
#1423
Author: Eduardo Quiroz Salinas
Date: Mon, 14 Aug 2006 16:42
44 lines
2537 bytes
T_Q_LEO escribi�:
> Saludos:
> 
> En mi script de PHP poseia la siguiente instruccion para consultar datos de
> una base MYSQL:
> 
> "select * from lider where MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> ".$st.",".$pp;
> 
> Dicha instrucci�n funcionaba sin problemas, pero luego me di cuenta de que
> debia realizar un filtrado m�s y agregue el siguiente parametro
> cliente='$empresa' quedando la instruccion como sigue:
> 
> select * from lider where cliente='$empresa' and
> MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> ".$st.",".$pp;
> 
> Por una extra�a raz�n dicha consulta no me arroja ningun resultado, he
> intentado colocar el parametro de cliente en otras partes de la instruccion
> pero aun asi no me da resultados.
> 
> Espero puedan orientarme a encontrar una solucion a mi problema.
> 
> Agradeciendo de antemano se despide atentamente,
> 
Sin conocer lo que hay en la base de datos puede ser complicado.
En primera instancia, se me ocurrir�a, por ejemplo, que empresa es un 
entero y tu lo comparas como si fuera String. Quiz� eso traiga 
problemas. Podr�as dar una breve descripci�n de la tabla y/o un par de 
tuplas?
Saludos!!

-- 
Eduardo Quiroz Salinas
Ingeniero Civil Inform�tico
eduardoquiroz@vtr.net
--
Linux user number 344659
KDE User 2453
"...Los que pueden ser virtuosos sin dios,
son la desesperaci�n de los creyentes..."
---------------------------------------------------
Re: Script en PHP
#1425
Author: Nitron
Date: Mon, 14 Aug 2006 16:51
48 lines
2435 bytes
Hola,

�Haz probado hacer un echo de la instruccion, imprimirla en cualquier parte 
de la pagina y despues pegarla en phpmyadmin?. En una de esas MySql te 
indica donde esta el error, o quizas la consulta efectivamente devuelve 
vacio?

Quizas inventarte un registro que efectivamente cumpla la condicion AND que 
estas poniendo.

Salu2.
Nitron.

"T_Q_LEO" <programNOSPAM@inspectorate.cl> escribi� en el mensaje 
news:44e09fc4$1_1@nova.entelchile.net...
> Saludos:
>
> En mi script de PHP poseia la siguiente instruccion para consultar datos 
> de
> una base MYSQL:
>
> "select * from lider where MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> ".$st.",".$pp;
>
> Dicha instrucci�n funcionaba sin problemas, pero luego me di cuenta de que
> debia realizar un filtrado m�s y agregue el siguiente parametro
> cliente='$empresa' quedando la instruccion como sigue:
>
> select * from lider where cliente='$empresa' and
> MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> ".$st.",".$pp;
>
> Por una extra�a raz�n dicha consulta no me arroja ningun resultado, he
> intentado colocar el parametro de cliente en otras partes de la 
> instruccion
> pero aun asi no me da resultados.
>
> Espero puedan orientarme a encontrar una solucion a mi problema.
>
> Agradeciendo de antemano se despide atentamente,
>
> -- 
> Ricardo Carcass�n
> Santiago - Chile
>
> 
Re: Script en PHP
#1424
Author: T_Q_LEO
Date: Mon, 14 Aug 2006 16:59
66 lines
3178 bytes
Hola:

No son campos de tipo entero sino mas bien VARCHAR:

 id   bigint(20)
 informe  varchar(255)
 ruta  varchar(255)
 fecha  varchar(255)
 comentario  varchar(255)
 usuario  varchar(50)
 cliente  varchar(255)

Espero pueda servirte esta informacion, agradeciendote de antemano tu tiempo
se despide atentamente,
-- 
Ricardo Carcass�n
Santiago - Chile
"Eduardo Quiroz Salinas" <eduardoquiroz@vtr.net> escribi� en el mensaje
news:ebq8go$hge$1@news.nivel5.cl...
> T_Q_LEO escribi�:
> > Saludos:
> >
> > En mi script de PHP poseia la siguiente instruccion para consultar datos
de
> > una base MYSQL:
> >
> > "select * from lider where MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> > YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> > ".$st.",".$pp;
> >
> > Dicha instrucci�n funcionaba sin problemas, pero luego me di cuenta de
que
> > debia realizar un filtrado m�s y agregue el siguiente parametro
> > cliente='$empresa' quedando la instruccion como sigue:
> >
> > select * from lider where cliente='$empresa' and
> > MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> > YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> > ".$st.",".$pp;
> >
> > Por una extra�a raz�n dicha consulta no me arroja ningun resultado, he
> > intentado colocar el parametro de cliente en otras partes de la
instruccion
> > pero aun asi no me da resultados.
> >
> > Espero puedan orientarme a encontrar una solucion a mi problema.
> >
> > Agradeciendo de antemano se despide atentamente,
> >
> Sin conocer lo que hay en la base de datos puede ser complicado.
> En primera instancia, se me ocurrir�a, por ejemplo, que empresa es un
> entero y tu lo comparas como si fuera String. Quiz� eso traiga
> problemas. Podr�as dar una breve descripci�n de la tabla y/o un par de
> tuplas?
> Saludos!!
>
> -- 
> Eduardo Quiroz Salinas
> Ingeniero Civil Inform�tico
> eduardoquiroz@vtr.net
> --
> Linux user number 344659
> KDE User 2453
> "...Los que pueden ser virtuosos sin dios,
> son la desesperaci�n de los creyentes..."
> ---------------------------------------------------
Re: Script en PHP
#1426
Author: T_Q_LEO
Date: Mon, 14 Aug 2006 17:12
66 lines
3008 bytes
Muchas gracias por la ayuda de ambos pero ya pude dar con la solucion :D

Realice la famosa tecnica de hacerle un echo a la instruccion sql y ahi me
di cuenta de que la variable $empresa estaba vacia, me falto asignar el rut
de cliente que tenia almacenada en mi variable de sesion.

Muchas gracias y disculpen las molestias =)

-- 
Ricardo Carcass�n
Santiago - Chile
"Nitron" <roarriagadaNOSPAM@vtr.net> escribi� en el mensaje
news:ebq9m7$hs3$1@news.nivel5.cl...
> Hola,
>
> �Haz probado hacer un echo de la instruccion, imprimirla en cualquier
parte
> de la pagina y despues pegarla en phpmyadmin?. En una de esas MySql te
> indica donde esta el error, o quizas la consulta efectivamente devuelve
> vacio?
>
> Quizas inventarte un registro que efectivamente cumpla la condicion AND
que
> estas poniendo.
>
> Salu2.
> Nitron.
>
> "T_Q_LEO" <programNOSPAM@inspectorate.cl> escribi� en el mensaje
> news:44e09fc4$1_1@nova.entelchile.net...
> > Saludos:
> >
> > En mi script de PHP poseia la siguiente instruccion para consultar datos
> > de
> > una base MYSQL:
> >
> > "select * from lider where MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> > YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> > ".$st.",".$pp;
> >
> > Dicha instrucci�n funcionaba sin problemas, pero luego me di cuenta de
que
> > debia realizar un filtrado m�s y agregue el siguiente parametro
> > cliente='$empresa' quedando la instruccion como sigue:
> >
> > select * from lider where cliente='$empresa' and
> > MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> > YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> > ".$st.",".$pp;
> >
> > Por una extra�a raz�n dicha consulta no me arroja ningun resultado, he
> > intentado colocar el parametro de cliente en otras partes de la
> > instruccion
> > pero aun asi no me da resultados.
> >
> > Espero puedan orientarme a encontrar una solucion a mi problema.
> >
> > Agradeciendo de antemano se despide atentamente,
> >
> > -- 
> > Ricardo Carcass�n
> > Santiago - Chile
> >
> >
>
>
Re: Script en PHP
#1427
Author: Cristian Gutierrez
Date: Mon, 14 Aug 2006 18:00
37 lines
1887 bytes
Hoy en la tarde, T. Q. LEO dijo:

[...]

> select * from lider where cliente='$empresa' and
> MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> ".$st.",".$pp;

Una sugerencia de estilo: es m�s legible (y hasta dir�a que un poco m�s
mantenibile) usar `sprintf' para componer sentencias SQL:

,----
| $template =<<<ENDOFTEMPLATE;
| 
| SELECT *
| FROM lider
| WHERE cliente = '%s'
|   AND MONTH(FROM_UNIXTIME(fecha)) = '%s'
|   AND YEAR(FROM_UNIXTIME(fecha))  = '%s'
| ORDER BY fecha
| DESC LIMIT %d,%d
| 
| ENDOFTEMPLATE
| 
| $query = sprintf($template,
|                  $empresa, $mescons, $anocons, $st, $pp);
`----

Lo ideal seria usar �prepared statements�, pero no siempre est�n
disponibles (entiendo que para PHP5 + MySQL 4.1 s�).

Salu2,

-- 
Guti
Code runs faster when Chuck Norris watches it.
Re: Script en PHP
#1429
Author: Cristian Gutierrez
Date: Mon, 14 Aug 2006 18:06
37 lines
1973 bytes
Hoy en la tarde, T. Q. LEO dijo:

[...]

> select * from lider where cliente='$empresa' and
> MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> ".$st.",".$pp;

Una sugerencia de estilo: es m�s legible (y hasta dir�a que un poco m�s
mantenible) usar `sprintf' para componer sentencias SQL:

,----
| $template =<<<ENDOFTEMPLATE;
| 
| SELECT *
| FROM lider
| WHERE cliente = '%s'
|   AND MONTH(FROM_UNIXTIME(fecha)) = '%s'
|   AND YEAR(FROM_UNIXTIME(fecha))  = '%s'
| ORDER BY fecha DESC
| LIMIT %d,%d
| 
| ENDOFTEMPLATE
| 
| $query = sprintf($template,
|                  $empresa, $mescons, $anocons, $st, $pp);
`----

Lo ideal ser�a usar �prepared statements�, pero no siempre est�n
disponibles (entiendo que para PHP5 + MySQL 4.1 s�).

Salu2,

-- 
Guti
Code runs faster when Chuck Norris watches it.
Re: Script en PHP
#1428
Author: T_Q_LEO
Date: Mon, 14 Aug 2006 18:22
51 lines
2207 bytes
Hola:

Es una interesate sugerencia la que me haces, creo que la implementare en
futuros proyectos que tenga en PHP.

Gracias =)

-- 
Ricardo Carcass�n
Depto. Inform�tica
Inspectorate Griffith S.A
Santiago - Chile
"Cristian Gutierrez" <crgutier@dcc.uchile.cl> escribi� en el mensaje
news:87fyfzi4dm.fsf@guti.cl...
> Hoy en la tarde, T. Q. LEO dijo:
>
> [...]
>
> > select * from lider where cliente='$empresa' and
> > MONTH(FROM_UNIXTIME(fecha))='$mescons' and
> > YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
> > ".$st.",".$pp;
>
> Una sugerencia de estilo: es m�s legible (y hasta dir�a que un poco m�s
> mantenibile) usar `sprintf' para componer sentencias SQL:
>
> ,----
> | $template =<<<ENDOFTEMPLATE;
> |
> | SELECT *
> | FROM lider
> | WHERE cliente = '%s'
> |   AND MONTH(FROM_UNIXTIME(fecha)) = '%s'
> |   AND YEAR(FROM_UNIXTIME(fecha))  = '%s'
> | ORDER BY fecha
> | DESC LIMIT %d,%d
> |
> | ENDOFTEMPLATE
> |
> | $query = sprintf($template,
> |                  $empresa, $mescons, $anocons, $st, $pp);
> `----
>
> Lo ideal seria usar �prepared statements�, pero no siempre est�n
> disponibles (entiendo que para PHP5 + MySQL 4.1 s�).
>
> Salu2,
>
> -- 
> Guti
> Code runs faster when Chuck Norris watches it.
Re: Script en PHP
#1430
Author: Jos� Miguel Santib��ez
Date: Mon, 14 Aug 2006 18:25
73 lines
3389 bytes
En el cap�tulo anterior (news:87ac67i43m.fsf@guti.cl), Cristian Gutierrez 
<crgutier@dcc.uchile.cl> dijo:

> Hoy en la tarde, T. Q. LEO dijo:
> 
> [...]
> 
>> select * from lider where cliente='$empresa' and
>> MONTH(FROM_UNIXTIME(fecha))='$mescons' and
>> YEAR(FROM_UNIXTIME(fecha))='$anocons' order by fecha DESC LIMIT
>> ".$st.",".$pp;
> 
> Una sugerencia de estilo: es m�s legible (y hasta dir�a que un poco m�s
> mantenible) usar `sprintf' para componer sentencias SQL:
> 
> ,----
>| $template =<<<ENDOFTEMPLATE;
>| 
>| SELECT *
>| FROM lider
>| WHERE cliente = '%s'
>|   AND MONTH(FROM_UNIXTIME(fecha)) = '%s'
>|   AND YEAR(FROM_UNIXTIME(fecha))  = '%s'
>| ORDER BY fecha DESC
>| LIMIT %d,%d
>| 
>| ENDOFTEMPLATE
>| 
>| $query = sprintf($template,
>|                  $empresa, $mescons, $anocons, $st, $pp);
> `----
> 
> Lo ideal ser�a usar �prepared statements�, pero no siempre est�n
> disponibles (entiendo que para PHP5 + MySQL 4.1 s�).
> 

Yo no se cuan "ideal" es realmente eso...

Sobre todo, si se analiza la forma que tom� esta pregunta: hab�a un query 
que funcionaba y despu�s se dio cuenta que le faltaba un par�metro 
importante (el filtro por cliente)...

No quiero sonar pedante, pero ante un nivel tan bajo de dise�o previo, 
pretender usar templates o prepared statments es un salto importante...

Por supuesto que, en beneficio de la legibilidad es bueno gastar un par de 
"espacios" para identar el sql...

Algo as� como:
 // preparar par�metros:
 $cliente = $empresa;
 $mescons = ... ;
 $anocons = ... ;
 $limit1  = $st ;
 $limit2  = $pp ;

 $query = select * 
            from lider 
           where cliente = '$cliente'
             and MONTH(FROM_UNIXTIME(fecha)) = '$mescons'
             and YEAR(FROM_UNIXTIME(fecha)) = '$anocons'
           order by fecha DESC 
           LIMIT $limit1,$limit2";

Eso permite manejar adecuadamente el query en caso de necesitar nuevos 
filtros posteriormente...

Saludos!

-- 
Apoye a la campa�a de alfabetizaci�n y  |       Jose M. Santiba�ez A.
ordenaci�n de las news, cada post en su |          <jms@nivel5.cl>
lugar y el lugar exacto para cada post  |        <http://caos.cl/jms>
Re: Script en PHP
#1431
Author: Cristian Gutierrez
Date: Mon, 14 Aug 2006 20:11
39 lines
2513 bytes
Hoy en la tarde, Jos� Miguel Santib��ez dijo:
> En el cap�tulo anterior (news:87ac67i43m.fsf@guti.cl), Cristian Gutierrez 
> <crgutier@dcc.uchile.cl> dijo:

[...]

>> Lo ideal ser�a usar �prepared statements�, pero no siempre est�n
>> disponibles (entiendo que para PHP5 + MySQL 4.1 s�).
>
> Yo no se cuan "ideal" es realmente eso...

* Legibilidad (se separa la consulta de los par�metros)
* Seguridad (chequeo de los tipos de los par�metros y escape de strings)
* Eficiencia (consulta parseada una sola vez; se nota harto en los ciclos)

Si bien "ideal" es algo fuerte, me quedar�a de todas formas con
"bastante mejor"; rara vez puedes mejorar esos tres aspectos a la vez!

[ Puede deberse tambi�n a la -justificable o no- urticaria que me
  produce el interpolar strings :-) ]

> Sobre todo, si se analiza la forma que tom� esta pregunta: hab�a un query 
> que funcionaba y despu�s se dio cuenta que le faltaba un par�metro 
> importante (el filtro por cliente)...
>
> No quiero sonar pedante, pero ante un nivel tan bajo de dise�o previo, 
> pretender usar templates o prepared statments es un salto importante...

Pero si puedes redise�ar despu�s de tener c�digo m�s ordenado, mejor :)

> Por supuesto que, en beneficio de la legibilidad es bueno gastar un par de 
> "espacios" para identar el sql...
[...]

120% agree.

-- 
Guti
If you get a ChuckNorrisException you'll probably die.
Re: Script en PHP
#1432
Author: Jos� Miguel Santib��ez
Date: Tue, 15 Aug 2006 03:05
20 lines
2039 bytes
En el cap�tulo anterior (news:8764gvhybj.fsf@guti.cl), Cristian
Gutierrez <crgutier@dcc.uchile.cl> dijo: 

[...]
>> No quiero sonar pedante, pero ante un nivel tan bajo de dise�o
>> previo, pretender usar templates o prepared statments es un salto
>> importante... 
> 
> Pero si puedes redise�ar despu�s de tener c�digo m�s ordenado, mejor
> :) 

despu�s de lo que he visto no una sino demasiadas veces, y a 
riesgo de pedanter�a: "redise�ar" si que queda grande... ;-)

Salute!

-- 
Apoye a la campa�a de alfabetizaci�n y  |       Jose M. Santiba�ez A.
ordenaci�n de las news, cada post en su |          <jms@nivel5.cl>
lugar y el lugar exacto para cada post  |        <http://caos.cl/jms>
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads