Erste Schritte mit vorbereiteten Anweisungen in MySQL
Vorbereitete Anweisungen sind ein wesentliches Werkzeug zum Schreiben sicherer und effizienter SQL-Abfragen. In diesem Artikel erfahren Sie, wie Sie vorbereitete Anweisungen mit mysqli, der MySQLi-Erweiterung in PHP, verwenden.
Syntaxfehler: Nicht-Objekt-Ausführung
Der Fehler, auf den Sie stoßen „Schwerwiegender Fehler: Aufruf einer Mitgliedsfunktionexecute() für ein Nicht-Objekt“ weist normalerweise darauf hin, dass die Variable $stmt nicht ordnungsgemäß initialisiert wurde oder ein Objekt ist. So korrigieren Sie das Problem:
$stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)");
Stellen Sie sicher, dass Sie eine haben Gültige Verbindung zur Datenbank, bevor Sie fortfahren.
Bindungsparameter
Vorbereitet Anweisungen verwenden Parametermarkierungen (z. B. ?), um Eingabewerte darzustellen. Diese Werte müssen vor der Ausführung der Anweisung an PHP-Variablen gebunden werden. Hier ist ein Beispiel:
$name = 'one'; $age = 1; $stmt->bind_param('si', $name, $age);
In diesem Beispiel binden wir den Namensparameter als Zeichenfolge ('s') und den Altersparameter als Ganzzahl ('i ').
Ausführen der Anweisung
Sobald die Parameter gebunden sind, können Sie die vorbereitete ausführen Anweisung:
$stmt->execute();
Fehlerbehandlung
Vorbereitete Anweisungen bieten eine bessere Fehlerbehandlung als direkte SQL-Abfragen. Verwenden Sie die Methode mysqli_stmt::error, um Fehlermeldungen abzurufen:
if ($stmt->error) { die("Error: " . $stmt->error); }
Vollständiges Beispiel
Hier ist ein vollständiges Beispiel für das Einfügen, Auswählen und Behandeln von Fehlern:
// Establish connection $mysqli = new mysqli("localhost", "root", "root", "test"); // Prepare and bind parameters $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); $stmt->bind_param('si', $name, $age); // Insert multiple rows $name = 'one'; $age = 1; $stmt->execute(); $name = 'two'; $age = 2; $stmt->execute(); // Prepare and execute select statement $stmt = $mysqli->prepare("SELECT * FROM users"); $stmt->execute(); // Bind result $result = $stmt->get_result(); // Process results while ($row = $result->fetch_assoc()) { echo $row['name'] . ", " . $row['age'] . "
\n"; } // Handle errors if ($stmt->error) { die("Error: " . $stmt->error); }
Durch die Verwendung vorbereiteter Anweisungen können Sie SQL-Injection-Angriffe verhindern und robustere und effizientere SQL-Abfragen schreiben.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3