[PDO] rowCount() altijd 0
Hoi,
Dit script:
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'"


Uitkomst:

Kan iemand me hierbij helpen?
Thx :D
Dit script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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());
?>
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'"


Uitkomst:

Kan iemand me hierbij helpen?
Thx :D
Gewijzigd op 28/10/2012 22:10:30 door - Raoul -
PDOStatement::rowCount() returns the number of rows affected by a DELETE, INSERT, or UPDATE statement.
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
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 -
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
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
Idd... maar 'k wil mijn auth class zo dynamisch mogelijk maken.. maar goed :P
Heb het uiteindelijk zo kunnen oplossen:
't Was dom van mij om een tabelnaam en tabelrij-namen met prepared statements te gebruiken... heb dus enkel usernameCredential en passwordCredential gebruikt.
Heb het uiteindelijk zo kunnen oplossen:
Code (php)
1
2
3
2
3
<?php
$oQuery = $oDb->prepare('SELECT * FROM ' . $this->_sTable . ' WHERE ' . $this->_sUsernameRow . ' = :usernameCredential AND ' . $this->_sPasswordRow . ' = :passwordCredential');
?>
$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.
Wat je zou kunnen doen als je het aantal rijen wil zien dat je gaat selecteren:
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:
(Scroll naar beneden tot "Example #2 Counting rows returned by a SELECT statement")
Code (php)
1
2
3
4
5
6
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);
?>
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:
(Scroll naar beneden tot "Example #2 Counting rows returned by a SELECT statement")
Gewijzigd op 29/10/2012 09:17:44 door Ykcin Ykcin




