[PgSQL] Query valideert CASE naar 0 ipv 1

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Storeman storeman

storeman storeman

19/06/2008 22:35:00
Quote Anchor link
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
Gewijzigd op 01/01/1970 01:00:00 door Storeman storeman
 
PHP hulp

PHP hulp

05/08/2020 03:59:57
 
Storeman storeman

storeman storeman

20/06/2008 22:54:00
Quote Anchor link
Anyone?

Ligt het misschien aan het datatype character varying?
 
Noppes

Noppes

20/06/2008 23:49:00
Quote Anchor link
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
Gewijzigd op 01/01/1970 01:00:00 door Noppes
 
Crispijn -

Crispijn -

21/06/2008 00:14:00
Quote Anchor link
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...
 
Storeman storeman

storeman storeman

21/06/2008 01:33:00
Quote Anchor link
Jep, dit is een copy-paste van een dump van de query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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 :(
 
- -

- -

21/06/2008 09:50:00
Quote Anchor link
Probeer dit zelf eens los uit te voeren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT
        persons.*,
        (
            CASE
                WHEN
                    password = 'e355c7bc5e8380cc58ec608d21fb1aa1fffafd97'
                THEN
                    '1'
                ELSE
                    '0'
            END
        ) AS zend_auth_credential_match
    FROM
        persons
    WHERE
        (
            mailaddress = 'mailaddress'
        )
 
Storeman storeman

storeman storeman

21/06/2008 11:00:00
Quote Anchor link
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.