dedlfix: mysql_num_rows

Beitrag lesen

Hi!

Ich fange einen Formulareintrag ab:
$xy = $_POST['xy'];

Die müssen nicht "abgefangen" werden. POST- und GET-Werte können auch direkt aus den Arrays $_POST und $_GET genommen werden, ohne dass eine weitere Variable dafür erwendet werden muss.

$eintragvorhanden = mysql_query("SELECT id FROM table WHERE table.name = ".$xy.";");

Allerdings muss der Kontextwechsel beachtet werden, egal welche Werte du in eine Query einfügst, sonst gibt es das gesamte Spektrum zwischen Syntaxfehler bis SQL-Injection an Problemen.

Und dann ist es sehr sinnvoll, sich mit Fehlerbehandlung zu beschäftigen. Die benötigt man, um robuste Scripte zu erstellen, die nicht nur schon bei selbst verschuldeten Fehlern mit wenig nachvollziehbaren Folgefehlern aussteigen.

if(mysql_num_rows($titlevorhanden)==0){

Wenn du nur eine Anzahl benötigst, dann musst du nicht sämtliche Daten abfragen. mysql_query() macht im Hintergrund einen vollständigen Fetch-Vorgang vom Server zum Client, so dass Funktionen wie mysql_num_rows() überhaupt ein Ergebnis liefern können.

Desweiteren willst du doch sicher im Falle dass der Eintrag noch nicht besteht, selbigen erzeugen, oder? Dann wäre ein ganz anderes Vorgehen sinnvoller, denn zwischen der Abfrage und dem Eintragen können andere parallel laufende Operationen dies bereits vorgenommen haben. Um das zu umgehen macht man besser ohne vorherige Prüfung einen Eintragsversuch. Für die Werte, die nicht doppelt vorkommen dürfen, legt man einen Unique-Index an. Der führt dazu, dass bei bereits vorhandenem Eintrag der Eintragsversuch eine Unique-Constraint-Verletzung meldet. Auf diese Fehlermeldung muss man vorbereitet sein. Wenn sie eintritt, kannst du dich beim Eintragenden beschweren, wenn nicht, ist alles bestens und es gibt nun den Datensatz.

Lo!