Warum kommt ein Fehler bei dieser SELECT COUNT(*)-Abfrage?

...komplette Frage anzeigen

3 Antworten

Ich denke weil 

$_POST['coupon_code'] 

ein String ist, du also noch Quotes (') hinzufügen musst.

    $result = $mysqli->query("SELECT COUNT(*) FROM `coupons` WHERE `coupon_code` = '".$_POST['coupon_code']."' AND `active` = 1");
$row = $result->fetch_row();
Antwort bewerten Vielen Dank für Deine Bewertung
MinecrafterPG 01.12.2016, 14:35

Das war der Fehler :D Danke

0
MonkeyKing 01.12.2016, 14:38
@MinecrafterPG

Ja, das wundert mich dann auch.. Mach doch mal ein print_r($_POST['coupon_code]); um zu sehen was drin ist.

Kleiner Hinweis noch: dein Code enthält eine riesige Sicherheitslücke. Indem du ungeprüft den Inhalt der POST Variable einfügst, kann man beliebigen SQL code ausführen. Auch so nette Sachen wie "DROP DATABASE". Das nennt man SQL Injection. Das musst du unterbinden!  Schau mal hier:

http://php.net/manual/de/security.database.sql-injection.php

0

Nimm die SQL-Abfrage mal und führ die in PHPMyAdmin aus, um zu sehen was rauskommst... 

PS: Kannst auch mysqli_affected_rows nutzen...

Antwort bewerten Vielen Dank für Deine Bewertung

Weil du was vergessen hast :D

$row = $result->fetch_row($result);
Antwort bewerten Vielen Dank für Deine Bewertung
MinecrafterPG 01.12.2016, 14:31

Kann nicht sein, weil wenn der Datensatz existiert, kommt der Error nicht :)

0
DustFireSky 01.12.2016, 14:37
@MinecrafterPG

Dann frage ich mal anders:

".$_POST['coupon_code']."

Was ist das für ein Datentyp ? Integer ? Schickst du evtl. einen String, wenn der Coupon Code leer ist ? Außerdem ist das sehr unklug, was du da machst! Man verarbeitet keine Superglobals direkt in einem Query ohne diese zu filtern.

Wenn es Integer Werte sind schreib => intval(".$_POST['coupon_code'].")

bei Text =>

mysqli_real_escape_string(".$_POST['coupon_code'].")

Du solltest dir das trotzdem angewöhnen, damit auch immer klar ist, auf welches query sich das fetch_row bezieht.

0

Was möchtest Du wissen?