Fehlerbehebung bei PDO-vorbereiteten Anweisungseinfügungen in MySQL
Die Verwendung von PHPs PDO mit vorbereiteten MySQL-Anweisungen bietet Sicherheit und Effizienz, es können jedoch Einfügeprobleme auftreten. Diese Anleitung befasst sich mit einem häufigen Problem: fehlgeschlagene Einfügungen trotz scheinbar korrektem Code.
Das Problem: Leere Datenbank nach einem INSERT
Versuch
Untersuchen wir ein Szenario, in dem ein INSERT
, der eine vorbereitete Anweisung verwendet, die Datenbank nicht auffüllt:
<code class="language-php">$statement = $link->prepare("INSERT INTO testtable(name, lastname, age) VALUES('Bob','Desaunois','18')"); $statement->execute();</code>
Dieser Code scheint funktionsfähig zu sein, das testtable
bleibt jedoch leer.
Die Lösung: Parameterbindung
Die Lösung besteht in der korrekten Bindung von Parametern. PDO-vorbereitete Anweisungen erfordern Platzhalter – entweder benannte Parameter (:param
) oder Fragezeichen (?
) – innerhalb der SQL-Abfrage. Diese Platzhalter werden dann während der execute()
-Methode.
So beheben Sie den Code mit beiden Methoden:
<code class="language-php">// Using Named Parameters $statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (:fname, :sname, :age)'); $statement->execute(['fname' => 'Bob', 'sname' => 'Desaunois', 'age' => '18']); // Using Question Mark Placeholders $statement = $link->prepare('INSERT INTO testtable (name, lastname, age) VALUES (?, ?, ?)'); $statement->execute(['Bob', 'Desaunois', '18']);</code>
Durch die Verwendung der Parameterbindung stellen Sie sicher, dass Daten sicher eingefügt werden, wodurch SQL-Injection-Risiken gemindert und die Datenintegrität aufrechterhalten wird. Die Werte werden während der Ausführung korrekt in die Abfrage eingesetzt.
Das obige ist der detaillierte Inhalt vonWarum können meine vorbereiteten PDO-Anweisungen keine Daten in MySQL einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!