Heim >Datenbank >MySQL-Tutorial >Warum funktioniert meine vom PDO vorbereitete „INSERT INTO'-Anweisung nicht?
Fehlerbehebung bei PDO Prepared Statements für INSERT INTO
in MySQL
Die Verwendung von PDO-vorbereiteten Anweisungen für MySQL-INSERT INTO
-Vorgänge kann manchmal zu unerwarteten Ergebnissen führen, z. B. dass keine Daten eingefügt werden. Lassen Sie uns eine gemeinsame Ursache und ihre Lösung untersuchen.
Beachten Sie diesen Code:
<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();</code>
Dieser Code versucht, eine neue Zeile in testtable
einzufügen, schafft es jedoch oft nicht, die Datenbank zu füllen.
Das fehlende Glied: Parameterbindung
Das Problem liegt in der fehlenden Parameterbindung. Vorbereitete Anweisungen erhöhen zwar die Sicherheit gegen SQL-Injection, erfordern jedoch die Verwendung von Platzhaltern für Werte, anstatt diese direkt in die Abfrage einzubetten. Dies ermöglicht eine sicherere und effizientere Ausführung, insbesondere wenn dieselbe Abfrage mit mehreren Datensätzen ausgeführt wird.
Lösungen: Benannte und Positionsparameter
Hier gibt es zwei Möglichkeiten, die Parameterbindung korrekt zu implementieren:
1. Benannte Parameter:
<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute([ ':fname' => 'Bob', ':sname' => 'Desaunois', ':age' => '18', ]);</code>
Dabei werden benannte Platzhalter (:fname
, :sname
, :age
) verwendet, die Werten innerhalb des Arrays der execute()
-Methode zugeordnet werden.
2. Positionsparameter:
<code class="language-php">$statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (?, ?, ?)'); $statement->execute(['Bob', 'Desaunois', '18']);</code>
Dabei werden Fragezeichen (?
) als Platzhalter verwendet, wobei die entsprechenden Werte im Array der execute()
-Methode bereitgestellt werden. Die Reihenfolge ist hier entscheidend.
Beide Ansätze binden Parameter effektiv, verhindern SQL-Injection und gewährleisten eine zuverlässige Dateneinfügung. Wählen Sie die Methode, die am besten zu Ihrem Codierungsstil und Ihren Projektanforderungen passt. Denken Sie daran, Benutzereingaben immer zu bereinigen, bevor Sie sie in Ihren Abfragen verwenden, auch bei vorbereiteten Anweisungen, um optimale Sicherheit zu gewährleisten.
Das obige ist der detaillierte Inhalt vonWarum funktioniert meine vom PDO vorbereitete „INSERT INTO'-Anweisung nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!