PHP MySQL PDO SELECT und counte die Ergebnisse

@Hancock danke für diese Idee!
Habe schon mal einen Fehler gefunden:
3 Query SELECT COUNT(*) FROM users WHERE resetcode = '\'c319e65ab3bfa035d418608cebb19c7\'' LIMIT 1
Da wurde ein \ escaped, aber ich weiß noch nicht wieso.
Ergänzung ()

So sieht die Query nun aus:
PHP:
$query = "SELECT COUNT(*) FROM users WHERE resetcode = ".$code." LIMIT 1";
Das fixt das schon mal.

Der Rest liegt auch daran, dass die Variablen nicht eingesetzt werden.

FRAGE:
Ich habe ja ein SELECT COUNT Statement.
Wie kann ich nun überprüfen, wie viele Rows gefunden worden sind.
Mit rowCount() scheint es nicht zu funktionieren
 
Zuletzt bearbeitet:
Hi,

so ist es aber eben gerade kein pdo im eigentlichen Sinne mehr und du baust wieder einfach einen Query-String. Ist das sinnvoll?

VG,
Mad
 
Letzte Frage.
Habe nun alles zum Laufen bekommen, aber wieso wurde der resetcode immer mit einem '\' vorher noch escaped?
Ergänzung ()

@Madman
Ja
So sieht der andere aus:
PHP:
$prep_update_stmt = "UPDATE users SET password = :password , salt = :salt , resetcode = :resetcodebasic WHERE resetcode = ".$resetcode;
Das Problem ist, wenn ich den resetcode da anders einfüge wird der nochmal escaped oder so, keine Ahnung.
 
Hmm, wenn da escaped wird, dann nur, weil das mit den ' ' schon in der Variable drin steht. Hast du magic_quotes in PHP an?

Zum Count():
Das ist das selbe wie sum(), du bekommst eine Spalte zurück, in dem die Anzahl drinsteht, die musst du nun abrufen, entweder via numerischem Index oder indem du dem Count ein Namen gibst und dann mit dem Namen abrufst (select Count(*) as c from blub).
 
Counten habe ich nun so gelöst:
PHP:
$count_result = $count_stmt->fetch(PDO::FETCH_ASSOC);
		$count = $count_result['COUNT(resetcode)'];
magic_quotes sind aus.
Sind ja aber nur bei dem resetcode komischer Weise.
 
Hi,

der Sinn von Prepared Statements ist, dass du SQL Injections verhinderst. Sprich, dass deine SQL Anweisung nur das macht, was sie darf. Sofern in einem Statement bzw. einem Übergabeparameter Zeichen enthalten sind, die nicht erlaubt sind, werden diese escaped. Was du jetzt machst ist, du führst PDO und vor allem Prepared Statements vollkommen ad absurdum, wenn du das Ding "$prep_update_stmt" nennst (also implizit behauptest, das wäre prepared) und dann einen Parameter hardcodiert reinbaust. Das ist nicht nur falsch, das ist gefährlich!

Such deinen Fehler und mach es richtig, alles andere ist Pfusch!

Ich habe ja ein SELECT COUNT Statement. Wie kann ich nun überprüfen, wie viele Rows gefunden worden sind. Mit rowCount() scheint es nicht zu funktionieren

Dir fehlen scheinbar massive Grundlagen! Ein "SELECT COUNT(*)" liefert dir als Ergebnis bereits den Wert der Anzahl zurück, dazu muss man nicht mehr mit "rowCount" oder dergleichen arbeiten! Das "COUNT(*)" ist die Anzahl!

VG,
Mad
 
@Madman das mit dem count habe ich ja nun.
Mehr als den resetcode zu escapen am Anfang, kann ich nicht machen, denn ich weiß nicht wie.
Und sonst wird wieder ein '\' in den String geaddet.

Und wie gesagt ich lerne mit dem Projekt aktuell das meiste erst dazu.
 
Hi,

schon klar, aber dann lerne es richtig! Oder gar nicht.

Wie schaut der String denn genau aus? Poste mal nur den "resetcode" bitte. Den Tipp von Hancock mal geprüft?

VG,
Mad
 
Zuletzt bearbeitet:
Mein resetcode den ich in der URL eingebe:
c319e65ab3bfa035d418608cebb19c7c
Dann wird er mit dieser Zeile escaped:
PHP:
$code = $pdo->quote($_GET['code']);

Und ja magic_quotes sind aus.
 
Hi,

und was benutzt du dann in dem PDO Statement? $code?

PHP:
$prep_update_stmt = "UPDATE users SET password = :password , salt = :salt , resetcode = :resetcodebasic WHERE resetcode = ".$resetcode;

Was ist dann das $resetcode hier?

VG,
Mad
 
Wenn ich print_r ($resetcode) machen bekomme ich folgendes:
'c319e65ab3bfa035d418608cebb19c7c', aber sobald ich den in die Query einsetze kommt in den SQL Logs folgendes raus:
PHP:
'/'c319e65ab3bfa035d418608cebb19c7c''
Und der resetcode ist eigentlich überall der selbe.
 
Hi,

nochmal: was ist jetzt "$code" und was ist "$resetcode"? Wieso benutzt du einmal das eine und dann das andere? In deiner Variable oben sieht man klar und deutlich, dass die Variable bereits in Hochkommata steht. Natürlich wird das escaped, wäre das nicht so wäre das eine SQL Injection par Excellence.

VG,
Mad
 
Hi,

bitte von beiden den Code posten, wo sie initialisiert werden. Wenn sie das selbe sind, warum dann beide vorhalten und nicht nur eines?

VG,
Mad
 
In der 1 Datei:
PHP:
$resetcode = $pdo->quote($_GET['code']);
UND SPÄTER
$_POST['resetcode'] = $_GET['code'];
In der 2 Datei:
PHP:
$resetcode = $pdo->quote($_GET['code']);

Sehe gerade, dass der POST Befehl unnötig ist.
Ergänzung ()

Habe die $code Variablen gerade umbenannt.
 
Hi,

Sehe gerade, dass der POST Befehl unnötig ist.

Aber ordentlich...junge junge...

Wozu nutzt du die "$pdo->quote" Funktion? PDO macht das ganz alleine, wenn du ein Prepared Statement nutzt! Das ist doch der Sinn dahinter! Lass das weg und bau mit $resetcode" dein Prepared Statement auf.

Klar kriegst du doppelte Hochkomata wenn zweimal escaped wird.

VG,
Mad
 
Okey danke.
Dann sollte es wohl funktionieren erstmal.
Habe wieder viel dazu gelernt :D
 
Zurück
Oben