PHP UPDATE vorbereitete Anweisung

9

Hi Ich versuche, die richtige Art zu lernen, vorbereitete Anweisungen zu verwenden, um SQL-Injektionen usw. zu vermeiden.

Wenn ich das Skript ausführe, bekomme ich eine Nachricht von meinem Skript mit den Worten: 0 Zeilen eingefügt, ich erwarte, dass 1 Zeilen eingefügt werden und natürlich die Tabelle aktualisieren. Ich bin mir meiner vorbereiteten Aussage nicht ganz sicher, da ich etwas recherchiert habe und ich meine, dass es von Beispiel zu Beispiel variiert.

Wenn ich meine Tabelle aktualisiere, muss ich alle Felder deklarieren oder ist es in Ordnung, nur ein Feld zu aktualisieren?

Jede Information wäre sehr hilfreich.

index.php

%Vor%

classes / class.Scripts.inc

%Vor%     
001221 19.08.2013, 14:37
quelle

2 Antworten

15
%Vor%

Für Ihre Fragen:

  

Ich bekomme eine Nachricht von meinem Skript mit den Worten 0 Zeilen eingefügt

Dies liegt daran, dass Sie die Reihenfolge der Parameter beim Binden umgekehrt haben. Sie suchen also in der ID-Spalte nach dem numerischen Wert Ihres $ Inhalts, der wahrscheinlich als 0 interpretiert wird. Die WHERE-Klausel des UPDATE entspricht also null Zeilen.

  

Muss ich alle Felder deklarieren oder ist es in Ordnung, nur ein Feld zu aktualisieren?

Es ist in Ordnung, nur eine Spalte in einer UPDATE-Anweisung zu setzen. Andere Spalten werden nicht geändert.

    
Bill Karwin 19.08.2013, 14:48
quelle
1

Tatsächlich sind vorbereitete Aussagen nicht so komplex, wie alle denken. Ganz im Gegenteil ist ein vorbereiteter statement-basierter Code die einfachste und sauberste Art, eine Abfrage auszuführen. Nimm zum Beispiel deinen Code.

%Vor%

Wie Sie sehen können, könnte der Code bei richtiger Verwendung sehr einfach und prägnant sein!

Du brauchst grundsätzlich nur drei Zeilen:

  1. Bereiten Sie Ihre Abfrage mit Platzhaltern
  2. vor
  3. Binden Sie dann die Variablen (setzen Sie zuerst die korrekten Typen für sie, wobei "i" für Integer steht, "s" für String usw.)
  4. Und dann führe die Abfrage aus.

So einfach wie 1-2-3!

Beachten Sie, dass Sie nicht das Ergebnis jeder Funktion manuell überprüfen müssen, sondern den Berichtsmodus für mysqli einmal einstellen können. Fügen Sie dazu folgende Zeile vor mysqli_connect() / new mysqli :

hinzu %Vor%

Das Ergebnis wird ungefähr das gleiche wie bei trigger_error sein, aber ohne eine einzige zusätzliche Codezeile!

    
Your Common Sense 18.05.2017 15:13
quelle