[PDO] rowCount() altijd 0

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Raoul -

- Raoul -

28/10/2012 22:08:40
Quote Anchor link
Hoi,

Dit script:
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
19
<?php

public function authenticate() {
        $oDb = $this->getDbConnection();
        
        $sPassword = ($this->_sAlgoritm == null ? $this->_sPasswordCredential : hash($this->_sAlgoritm, $this->_sPasswordCredential));

        $oQuery = $oDb->prepare('SELECT * FROM :tableName WHERE :usernameRow = :usernameCredential AND :passwordRow = :passwordCredential');
        $oQuery->bindParam(':tableName', $this->_sTable);
        $oQuery->bindParam(':usernameRow', $this->_sUsernameRow);
        $oQuery->bindParam(':usernameCredential', $this->_sUsernameCredential);
        $oQuery->bindParam(':passwordRow', $this->_sPasswordRow);
        $oQuery->bindparam(':passwordCredential', $sPassword);
        
        $oQuery->execute();
        
        die("hier=".$oQuery->rowCount());

?>


Wilt maar niet werken, ook al bestaat een rij, ->rowCount() geeft altijd 0 terug.
Heb ook al de query zelf gechecked (in de vorm van de SQL uit te echoën en kijken of alle waardes kloppen), en alles klopt.

"SELECT * FROM User WHERE username = 'xxxx' AND password = 'test'"

Afbeelding
Afbeelding
Uitkomst:
Afbeelding

Kan iemand me hierbij helpen?
Thx :D
Gewijzigd op 28/10/2012 22:10:30 door - Raoul -
 
PHP hulp

PHP hulp

23/11/2024 14:34:34
 
Jaron T

Jaron T

28/10/2012 22:12:32
Quote Anchor link
PDOStatement::rowCount() returns the number of rows affected by a DELETE, INSERT, or UPDATE statement.
 
- Raoul -

- Raoul -

28/10/2012 22:13:19
Quote Anchor link
Jaron T op 28/10/2012 22:12:32:
PDOStatement::rowCount() returns the number of rows affected by a DELETE, INSERT, or UPDATE statement.


Zag het ook net, heb de rowCount() even vervangen met een count($oQuery->fetchAll()) ding, maar dat is ook 0.. :s
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

die("hier=".count($oQuery->fetchAll()));

?>


Toevoeging op 28/10/2012 22:16:43:

Ok! Heb even een instelling aangezet die exception throwt als er een error in PDO zit... nu kom ik er dus achter dat PDO met bindParam() alles escaped, dus ook die usernamerow waardoor 'ie iets teruggeeft als

SELECT * FROM 'users' WHERE ..

De fout zie je dus zelf al.. is er dus in bindParam() iets zodat je dat escapen op één bepaalde regel kunt uitzetten?
Gewijzigd op 28/10/2012 22:13:48 door - Raoul -
 
Jaron T

Jaron T

28/10/2012 22:18:09
Quote Anchor link
je gebruikt je prepared statements echt op de verkeerde manier.. je maakt het jezelf overigens ook veel moeilijker dan dat het is. gewoon ...WHERE username = :username AND password = :password LIMIT 1

edit; vuistregel: alleen data die de user kan ingeven hoort ge-escaped te worden
Gewijzigd op 28/10/2012 22:20:39 door Jaron T
 
- Raoul -

- Raoul -

28/10/2012 22:21:00
Quote Anchor link
Idd... maar 'k wil mijn auth class zo dynamisch mogelijk maken.. maar goed :P
Heb het uiteindelijk zo kunnen oplossen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$oQuery
= $oDb->prepare('SELECT * FROM ' . $this->_sTable . ' WHERE ' . $this->_sUsernameRow . ' = :usernameCredential AND ' . $this->_sPasswordRow . ' = :passwordCredential');
?>


't Was dom van mij om een tabelnaam en tabelrij-namen met prepared statements te gebruiken... heb dus enkel usernameCredential en passwordCredential gebruikt.
 
Ykcin Ykcin

Ykcin Ykcin

29/10/2012 09:10:51
Quote Anchor link
Wat je zou kunnen doen als je het aantal rijen wil zien dat je gaat selecteren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
global $db; //PDO instantie
$stmt = $db->('SELECT COUNT(:field0) FROM :table WHERE :field1 = :value1');
$field0 = 'id'; //Voorbeeld
$stmt->bindParam(':field0', $field0, PDO::PARAM_STR);
?>

Wat er hier gebeurd is dat je in principe de zelfde query uitvoert, maar je het aantal records terugkrijgt i.p.v. data uit de tabel.

Hier kun je verdere uitleg en een uitgebreidere uitleg vinden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
http://php.net/manual/en/pdostatement.rowcount.php

(Scroll naar beneden tot "Example #2 Counting rows returned by a SELECT statement")
Gewijzigd op 29/10/2012 09:17:44 door Ykcin Ykcin
 



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.