PHP MySQL PDO SELECT und counte die Ergebnisse

Hier stand Mist... Die Doku sagt zwar "false" bei Fehler, tatsächlich isses auch "false" bei "keine Daten"...
 
Zuletzt bearbeitet:
Hi,

du setzt doch die Query in PHPMyAdmin nicht per PDO ab oder? Dann kannst du auch nicht sagen, dass die Ergebnismenge per PDO nicht leer ist!

VG,
Mad
 
Ja, aber ich seine Aussage mit "Die Query ist leer" kann viel heißen, wie z.B. Variable falsch, kein Ergebnis....
 
$resetcode = $pdo->quote($_GET['code']);
=>
'meinresetcode21313123123123123'
 
Cr41s3 schrieb:
$resetcode = $pdo->quote($_GET['code']);
=>
'meinresetcode21313123123123123'

Und es gibt auch eine Zeile, in der im Resetcode 'meinresetcode21313123123123123' drin steht? Sonst ist irgendwo klar, dass du kein Ergebnis bekommst?
 
Ja gibt es.
Bzw. habe den Wert abgeändert und mal per echo den resetcode ausgegeben und dann die Query kopiert und beides zusammen in PHPMyAdmin ausgeführt.
Gab ein Ergebnis.
MfG-
 
Cr41s3 schrieb:
Ja gibt es.
Bzw. habe den Wert abgeändert und mal per echo den resetcode ausgegeben und dann die Query kopiert und beides zusammen in PHPMyAdmin ausgeführt.
Gab ein Ergebnis.
MfG-

$prep_select_stmt2 = "SELECT * FROM users";

Mach mal so und var_dump() aufs Ergebnis, da müßte ja deine Zeile dann dabei sein. Vielleicht irgendwo ein Leerzeichen am Wert von Resetcode oder weiss der Geier.
 
Okey, danke habe den Fehler nun gefixxt.
Nächste Query geht zwar auch nicht, aber da werde ich gleich nach dem selben Prinzip arbeiten.

MfG-

Fix:
Im Array mit ':' im Query ohne ':'
Ergänzung ()

Letztes Problem :D

PHP:
$update_params = array(':password' => $password, ':salt' => $random_salt, ':resetcodebasic' => $resetcodebasic, ':resetcode' => $resetcode);
				$prep_update_stmt = "UPDATE users SET password = :password , salt = :salt , resetcode = :resetcodebasic WHERE resetcode = :resetcode";
				$update_stmt = $pdo->prepare($prep_update_stmt);
				$peter = $update_stmt->execute($update_params);
				
				var_dump ($peter);
var_dump gibt mir:
bool(true)
zurück, aber in der Datenbank ändert sich nichts.
Die Variablen sind auch alle gesetzt.
 
Zuletzt bearbeitet:
Also in meinem Register Script habe ich im Array und Query ':'
In einem Teil dieses Scripts weiter oben nur im Array mit ':' und es geht, aber nicht mit ':' im Query..

Kann mir jemand nochmal ein funktionierendes Beispiel schicken, mit dem man zählen kann, wie viele Rows gefunden worden sind mit dem SELECT COUNT(*) Befehl?

Bin mittlerweile am verzweifeln, da die Querys teils funktionieren, aber die Syntax kein Muster ergibt -.-
 
Cr41s3 schrieb:
Also in meinem Register Script habe ich im Array und Query ':'
In einem Teil dieses Scripts weiter oben nur im Array mit ':' und es geht, aber nicht mit ':' im Query..

Laut allmighty Google sollte wohl beides gehen O.o.
Wenn du nactürlich SELECT resetcode FROM users WHERE resetcode = :resetcode LIMIT 1 ohne doppelpunkt ausführst, ist es loisch dass es geht: dann vergleichst du die Spalte mit sich selbst und bekommst für jede Zeile ein Ergebnis, durch das Limit dann halt nur das erste.

Wenn dich das durcheinanderbringt dann nimm einfach ? und schieß die Werte als normales Array rein, finde ich weniger umständlich. Und wo wir bei umständlich sind: diese ganze prepare/execute Geschichte würde ich als Funktion kapseln wenn ich du wär, so dass du nur noch dein Statement als String und ein Array mit den Variablen hingibst und das Ergebnis als assoziatives Array zurückbekommst. Dann kannst du auch ruhigen Gewissens wie http://stackoverflow.com/questions/12976697/pdo-catch-and-output-mysql-errors hier beschrieben ein try/catch drum herum setzen und die blödesten Fehler gleich sehen.
 
Zuletzt bearbeitet von einem Moderator:
exceptions habe ich auch schon versucht.
Ja mir wurde hier im Forum gesagt ich soll die ? nicht mehr verwenden und deswegen habe ich alles umgeschrieben..

Versuche es nach her nochmal
Ergänzung ()

Exception: 0
Mit und ohne ':'
Alles ausprobiert.
Ich heul gleich :D
 
Cr41s3 schrieb:
exceptions habe ich auch schon versucht.
Ja mir wurde hier im Forum gesagt ich soll die ? nicht mehr verwenden und deswegen habe ich alles umgeschrieben..

Mach doch mal ein SELECT * FROM users WHERE resetcode != :resetcode und schau was du da zurückbekommst, wenn das klappt kanns ja nur an deinen Daten liegen die du in :resetcode fütterst.

Zu den Fragezeichen: wüßte nicht wieso, letztendlich machen die auch nix anderes als der Doppelpunkt, nur dass man eine Variable unter Umständen mal mehrfach übergeben muss.
 
Also zum select Count(*), da machst du ein fetchColumn(0) drauf.
Code:
$count=$db->query($query)->fetchColumn(0);
Oder entsprechend mit Prepared Statements.

Ich persönlich verwende fast immer die ?, da kann man keine Schreibfehler einbauen (und meistens übergibt man sowieso nur 1-3 Parameter).
 
mambokurt schrieb:
Mach doch mal ein SELECT * FROM users WHERE resetcode != :resetcode und schau was du da zurückbekommst, wenn das klappt kanns ja nur an deinen Daten liegen die du in :resetcode fütterst.

Zu den Fragezeichen: wüßte nicht wieso, letztendlich machen die auch nix anderes als der Doppelpunkt, nur dass man eine Variable unter Umständen mal mehrfach übergeben muss.

Kommt auch 0 bei raus, obwohl es 1 oder 2 sein müsste.

Hancock schrieb:
Also zum select Count(*), da machst du ein fetchColumn(0) drauf.
Code:
$count=$db->query($query)->fetchColumn(0);
Oder entsprechend mit Prepared Statements.

Ich persönlich verwende fast immer die ?, da kann man keine Schreibfehler einbauen (und meistens übergibt man sowieso nur 1-3 Parameter).
Hilft leider auch nicht.

Ich versuche es morgen mal mit den '?'
 
Ich bin ehrlich gesagt langsam raus, wenns nicht klappt poste mal dein volles Programm und den Aufbau/Inhalt der Tabelle dann versuche ich das nachzubauen...
 
Die Abwesenheit von PDO::closeCursor() kann wohl unter Umständen zu eigenartigem Verhalten führen. Evtl. liegts daran?
 
Zurück
Oben