[PgSQL] Query valideert CASE naar 0 ipv 1
Via het zend framework wil ik de AUTH module gebruiken om in te loggen, met behulp van de database adapter.
De adapter genereert de volgende query:
SELECT "persons".*, (CASE WHEN "password" = 'wachtwoord' THEN '1' ELSE '0' END) AS "zend_auth_credential_match" FROM "persons" WHERE ("mailaddress" = 'mailaddress')
De query wordt goed uitgevoerd en geeft de resultset terug, met de zend_auth_credential_match = 0.
Het vreemde is dat de gegevens in de password colom exact hetzelfde zijn als in de query.
tabel 'persons'
id - int
firstname - char var 255
...
...
password - char var 255
Hoe kan het dat deze valideert naar 0? password = password valideert wel naar 1.
De waarden, copy-paste:
query: e355c7bc5e8380cc58ec608d21fb1aa1fffafd97
tabel: e355c7bc5e8380cc58ec608d21fb1aa1fffafd97
Overigens is de query wijzigen niet echt een optie, daar dit standaard in het framework zit
De adapter genereert de volgende query:
SELECT "persons".*, (CASE WHEN "password" = 'wachtwoord' THEN '1' ELSE '0' END) AS "zend_auth_credential_match" FROM "persons" WHERE ("mailaddress" = 'mailaddress')
De query wordt goed uitgevoerd en geeft de resultset terug, met de zend_auth_credential_match = 0.
Het vreemde is dat de gegevens in de password colom exact hetzelfde zijn als in de query.
tabel 'persons'
id - int
firstname - char var 255
...
...
password - char var 255
Hoe kan het dat deze valideert naar 0? password = password valideert wel naar 1.
De waarden, copy-paste:
query: e355c7bc5e8380cc58ec608d21fb1aa1fffafd97
tabel: e355c7bc5e8380cc58ec608d21fb1aa1fffafd97
Overigens is de query wijzigen niet echt een optie, daar dit standaard in het framework zit
Gewijzigd op 01/01/1970 01:00:00 door Storeman storeman
Gesponsorde koppelingen:
Anyone?
Ligt het misschien aan het datatype character varying?
Ligt het misschien aan het datatype character varying?
Is dit ook daadwerkelijk de query welke geexecuted wordt:
SELECT "persons".*, (CASE WHEN "password" = 'wachtwoord' THEN '1' ELSE '0' END) AS "zend_auth_credential_match" FROM "persons" WHERE ("mailaddress" = 'mailaddress')
?
want die "" bij case en in de where clause die horen daar in principe niet thuis... en de tabel alias ook nog eens geqoute .....
Het wordt volgens mij dan niet gezien als field identifier
SELECT "persons".*, (CASE WHEN "password" = 'wachtwoord' THEN '1' ELSE '0' END) AS "zend_auth_credential_match" FROM "persons" WHERE ("mailaddress" = 'mailaddress')
?
want die "" bij case en in de where clause die horen daar in principe niet thuis... en de tabel alias ook nog eens geqoute .....
Het wordt volgens mij dan niet gezien als field identifier
Gewijzigd op 01/01/1970 01:00:00 door Noppes
wat noppes zegt: van de variabele "password" binnen je sql mak je nu gewoon een statisch ding. Natuurlijk is wachtwoord niet gelijk aan password. Wanneer je de quote's weghaalt en de query netjes uitvoert (incl foutafhandeling) moet je al een stuk verder komen.
Veel succes ermee.
Ik lees je query nu nog weer helemaal door en ik vind 't maar een raar ding. Geef heb eens binnen tags helemaal incl het deel waar je je query draait...
Veel succes ermee.
Ik lees je query nu nog weer helemaal door en ik vind 't maar een raar ding. Geef heb eens binnen tags helemaal incl het deel waar je je query draait...
Jep, dit is een copy-paste van een dump van de query:
Als ik die CASE WHEN weghaal en er vervolgens een extra WHERE deel aan toevoeg (met het wachtwoord), dan nog steeds valideert ie niet. Daarnaast wordt de query gewoon uitgevoerd door pgadmin, én draaien andere queries via het zend framework op phpmyadmin wél gewoon.
Zeer vreemd inderdaad (ook die quotes), maar daar zullen de geleerden bij Zend wel over nagedacht hebben.
Ik ben er echter nog steeds niét uit :(
Code (php)
1
SELECT "persons".*, (CASE WHEN "password" = 'wachtwoord' THEN '1' ELSE '0' END) AS "zend_auth_credential_match" FROM "persons" WHERE ("mailaddress" = 'mailaddress')
Als ik die CASE WHEN weghaal en er vervolgens een extra WHERE deel aan toevoeg (met het wachtwoord), dan nog steeds valideert ie niet. Daarnaast wordt de query gewoon uitgevoerd door pgadmin, én draaien andere queries via het zend framework op phpmyadmin wél gewoon.
Zeer vreemd inderdaad (ook die quotes), maar daar zullen de geleerden bij Zend wel over nagedacht hebben.
Ik ben er echter nog steeds niét uit :(
Probeer dit zelf eens los uit te voeren:
De rij wordt wel gevonden, met of zonder quotes, dus ook die van jou werkt, jonathan. Echter de CASE valideert niet.
Ik heb zojuist geprobeert om de rij te vinden op password, dan wordt er geen rij gevonden, via een LIKE met % aan het eind vind ie hem wel.
edit:
Nog even verder gezocht, blijkt dat er new-lines in het password veld staan, hier meede ik gister nog op gechecked te hebben.
:S :S
Ik heb zojuist geprobeert om de rij te vinden op password, dan wordt er geen rij gevonden, via een LIKE met % aan het eind vind ie hem wel.
edit:
Nog even verder gezocht, blijkt dat er new-lines in het password veld staan, hier meede ik gister nog op gechecked te hebben.
:S :S



