Heim > Datenbank > MySQL-Tutorial > Warum funktioniert meine vom PDO vorbereitete „INSERT INTO'-Anweisung nicht?

Warum funktioniert meine vom PDO vorbereitete „INSERT INTO'-Anweisung nicht?

DDD
Freigeben: 2025-01-13 07:01:42
Original
899 Leute haben es durchsucht

Why Doesn't My PDO Prepared `INSERT INTO` Statement Work?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage