Hey zusammen,
ich hab gerade einen alten Skript von mir rausgekramt und wollte diesen auf den neusten Stand bringen. Nach den ersten paar Zeilen kam natürlich auch eine Datenbankabfrage, die ich von MySQL auf MySQLi umstellen will.
Der Connect zur Datenbank steht, das war kein Problem.
Nun bin ich an einem Punkt, bei dem ich eine Eingabe (E-Mail Adresse) mit der DB abgleiche um herauszufinden, ob der Eintrag bereits existiert.
Jetzt habe ich 2, bzw. eigentlich 3 verschiedene Lösungsansätze, die auch alle funktionieren und mir das richtige Ergebnis (nach mehreren Test) liefern. Ausgabe jeweils per var_dump();
Variante 1: Prepared mit affected_rows (Variante 2: oder num_rows)
Variante 3: Query mit num_rows
Eine 4. Variante gibt es nicht (Variante 3 mit affected_rows). Dort erscheint folgender Hinweis:
Notice: Undefined property: mysqli_result::$affected_rows... Wobei var_dump() auch hier das richtige Ergebnis liefert.
Welche der 3 Varianten ist die "beste" (über das Wort brauchen wir nicht streiten ^^). Mir geht es um puncto Sicherheit, Übersichtlichkeit und Schnelligkeit. Schnelligkeit aber eher weniger. Ich glaube kaum, dass man bei einer der 3 Varianten einen Unterschied empfindet.
Von der Sicherheit her würde ich zu Variante 1 oder 2 tendieren, wegen den Prepared Statments. Von der Übersicht eher zu 3, weil weniger Code.
Laut Manual sollte affected_rows bei INSERT, UPDATE und DELETE benutzt werden, scheint aber auch bei SELECT zu funktionieren. Für SELECT bietet sich daher eher num_rows an.
Alles in allem tendiere ich derzeit zu Variante 2 (Prepared mit num_rows).
Sehen das andere genauso?
Gruß Steffen
ich hab gerade einen alten Skript von mir rausgekramt und wollte diesen auf den neusten Stand bringen. Nach den ersten paar Zeilen kam natürlich auch eine Datenbankabfrage, die ich von MySQL auf MySQLi umstellen will.
Der Connect zur Datenbank steht, das war kein Problem.
Nun bin ich an einem Punkt, bei dem ich eine Eingabe (E-Mail Adresse) mit der DB abgleiche um herauszufinden, ob der Eintrag bereits existiert.
Jetzt habe ich 2, bzw. eigentlich 3 verschiedene Lösungsansätze, die auch alle funktionieren und mir das richtige Ergebnis (nach mehreren Test) liefern. Ausgabe jeweils per var_dump();
Variante 1: Prepared mit affected_rows (Variante 2: oder num_rows)
PHP-Code:
$sql = 'SELECT
COUNT(EMail)
FROM
Benutzer
WHERE
EMail = ?';
// Abfrage wird vorbereitet
$abfrage = $db->prepare($sql);
// Fehlende Variablen zuweisen
$abfrage->bind_param('s',$email);
// Abfrage wird ausgeführt
$abfrage->execute();
// Ergebnisse werden gespeichert
$abfrage->store_result();
// Wenn ein Eintrag existiert -> E-Mail Adresse bereits hinterlegt -> Fehler
if($abfrage->affected_rows>0) // Bzw. if($abfrage->num_rows>0)
$fehler[] = "Die eingegebene E-Mail Adresse existiert bereits und kann nicht verwendet werden";
Variante 3: Query mit num_rows
PHP-Code:
$sql = 'SELECT
EMail
FROM
Benutzer
WHERE
EMail = "'.$email.'"';
// Query ausführen
$abfrage = $db->query( $sql );
// Wenn ein Eintrag existiert -> E-Mail Adresse bereits hinterlegt -> Fehler
if($abfrage->num_rows>0)
$fehler[] = "Die eingegebene E-Mail Adresse existiert bereits und kann nicht verwendet werden";
Eine 4. Variante gibt es nicht (Variante 3 mit affected_rows). Dort erscheint folgender Hinweis:
Notice: Undefined property: mysqli_result::$affected_rows... Wobei var_dump() auch hier das richtige Ergebnis liefert.
Welche der 3 Varianten ist die "beste" (über das Wort brauchen wir nicht streiten ^^). Mir geht es um puncto Sicherheit, Übersichtlichkeit und Schnelligkeit. Schnelligkeit aber eher weniger. Ich glaube kaum, dass man bei einer der 3 Varianten einen Unterschied empfindet.
Von der Sicherheit her würde ich zu Variante 1 oder 2 tendieren, wegen den Prepared Statments. Von der Übersicht eher zu 3, weil weniger Code.
Laut Manual sollte affected_rows bei INSERT, UPDATE und DELETE benutzt werden, scheint aber auch bei SELECT zu funktionieren. Für SELECT bietet sich daher eher num_rows an.
Alles in allem tendiere ich derzeit zu Variante 2 (Prepared mit num_rows).
Sehen das andere genauso?

Gruß Steffen


Kommentar