[PDO] rowCount() altijd 0
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 -
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
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.
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