Where SQL con WDO

Responder
mag071
Mensajes: 24
Registered for: 3 years 4 months
Venezuela

Where SQL con WDO

Mensaje por mag071 »

Saludos Desde Venezuela;

He comenzado un proyectico personal para ponerme en practica con modharbour.
Ahora he tomado tanto el ejemplo de mercury de go.extend como el de sessiones de tweb
y en ambos al momento de hacer el login quito la verificacion dura por una consulta a una tabla via wdo.

Ejemplo :
// if hParam[ 'user' ] == 'demo' .and. hParam[ 'psw' ] == '1234'

if buscouser(hParam[ 'user' ],hParam[ 'psw' ])

donde en tsessiones es una función,
pero en mercury es un clase modelo.
el problema es que en los dos casos si intento hacer esta consulta sql

SELECT nombreuser,active,telefono,idtelegram,ultacceso from usermain WHERE email="mag071@gmail.com" AND passmd5="827ccb0eea8a706c4c34a16891f84e7b"
que me funciona correctamente desde cualquier cliente sql como heidisql
no pasa desde alli el WDO

Código: Seleccionar todo

 
function buscouser(cUser,cPass)
LOCAL oDb
local aRows	:= {}	
local hRes
local cPassmd5:=hb_md5(cPass)
local cQuery
local cQuery2

oDb   := WDO():Rdbms( 'MYSQL', 'localhost', 'harbour', 'password', 'sonestossonetos', 3357 )
cQuery:="SELECT nombreuser,active,telefono,idtelegram,ultacceso from usermain" 
cQuery2:= "SELECT nombreuser,active,telefono,idtelegram,ultacceso from usermain where email5="+alltrim(cUser)+" and passmd5="+cPassMd5
hRes  := oDb:Query( cQuery )  //Si uso cQuery funciona correctamente , pero si uso cQuery2 no funciona. 
aRows := oDb:FetchAll( hRes, .t. )
  
 if len(aRows) > 0
    return .t.
   else 
    return .f. 
 endif    

Return .F.

 
al poner el WHERE en la consulta no me corre, no me ejecuta nada
le quito a la consulta el WHERE y si me funciona.
he visto en códigos que formatean todas las variable pero no se con que funciones hacerlo.

Gracias de antemano.

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 5 months

Mensaje por charly »

Hola,

Seguramente no llega bien los parametros. Lo primero q hemos de hacer es mirar q llega. Debajo de cquery2 pon

? cQuery2
return

Con esto te ha de mostrar el contenido. Miralo y si hace falta copias el contenido y lo pruebas en tu base de datos a ver si es correcto
Salutacions, saludos, regards.
Charly

"...programar es fácil, hacer programas es difícil..."

https://httpd2.blogspot.com/
https://forum.modharbour.app

mag071
Mensajes: 24
Registered for: 3 years 4 months
Venezuela

Mensaje por mag071 »

Gracias Charly;

me retorna lo siguiente

SELECT nombreuser,active,telefono,idtelegram,ultacceso from usermain where email5=demo%40demo.com and passmd5=81dc9bdb52d04dc20036dbd8313ed055 Error: Argument error
operation: conditional
[ 1] = U nil
called from: pcode.hrb, MAIN, line: 8
called from: HB_HRBDO, line: 0
called from: ..\apache.prg, EXECUTE, line: 134

veo que me retorna primero como el email5 es un correo el @ lo pone %40 y no me lo pone entre comillas
Lo de las comillas se lo puedo hacer manualmente a la cadena de texto cQuery2 la duda es como ahora transformo el %40 a @ nuevamente.
FWH usaba una funcion llamada como clip2sql o algo asi parecido para formatear los campos a colocar en los where.

ya puse cQuery2 de esta forma para las comillas dobles antes de las variables me faltaria es %40 ya que cUser es un email
cQuery2:= [SELECT nombreuser,active,telefono,idtelegram,ultacceso from usermain where email5="]+alltrim(cUser)+["]+[ and passmd5="]+cPassMd5+["]
generandome
SELECT nombreuser,active,telefono,idtelegram,ultacceso from usermain where email5="demo%40demo.com" and passmd5="81dc9bdb52d04dc20036dbd8313ed055" Error: Argument error
operation: conditional

pero igual si le quito al cQuery2 email5 para dejar el where solo con passmd5 y la variable entre comilla me sigue dando Argument Error.
SELECT nombreuser,active,telefono,idtelegram,ultacceso from usermain where passmd5="81dc9bdb52d04dc20036dbd8313ed055" Error: Argument error
operation: conditional
[ 1] = U nil
called from: pcode.hrb, MAIN, line: 8
called from: HB_HRBDO, line: 0
called from: ..\apache.prg, EXECUTE, line: 134

Gracias Charly.

mag071
Mensajes: 24
Registered for: 3 years 4 months
Venezuela

Mensaje por mag071 »

Listo !!!

Conseguí en el directorio samples de modharbour el genesis de Antonio.
Allí vi el uso de hb_urldecode en un campo que era un email.
y el cQuery2 quedo así

cQuery2:= [SELECT nombreuser,active,telefono,idtelegram,ultacceso from usermain where email5="]+hb_UrlDecode( cUser )+["]+[ and passmd5="]+cPassMd5+[" ]+[LIMIT 1]

Quedando la función buscouser de esta manera

Código: Seleccionar todo

 
function buscouser(cUser,cPass)
LOCAL oDb
local aRows	:= {}	
local hRes
local cPassmd5:=hb_md5(cPass)
local cQuery

oDb   := WDO():Rdbms( 'MYSQL', 'localhost', 'harbour', 'password', 'bdsistema', 3357 )
cQuery2:= [SELECT nombreuser,active,telefono,idtelegram,ultacceso from usermain where email5="]+hb_UrlDecode( cUser )+["]+[ and passmd5="]+cPassMd5+[" ]+[LIMIT 1]

hRes  := oDb:Query( cQuery2 )
aRows := oDb:FetchAll( hRes, .t. )
  
 if len(aRows) > 0
    return .t.
   else 
    return .f. 
 endif    

Return .F.
 
 
Gracias Charly.

Responder