Vorbereitete Aussagen sind eine der Schlüsseltechnologien zur Verbesserung der Sicherheits- und Leistung, wenn MySQL -Datenbanken mit PHP betrieben werden. MySQLI :: STMT_INIT ist eine Funktion in der MySQLI -Klasse, mit der die Vorverarbeitungsangaben -Objekte initialisiert werden. Es wird häufig verwendet, um mit den Methoden Prepe () und Bind_param () zusammenzuarbeiten, um SQL -Update -Operationen (z. B. Aktualisierungsanweisungen ) sicher durchzuführen.
Dieser Artikel enthält detaillierte Beschreibungen zum Ausführen von Aktualisierungsanweisungen mit MySQLI :: STMT_INIT und empfohlene Best Practices und praktische Tipps.
MySQLI :: STMT_INIT ist eine Funktion, mit der das Objekt mySQLI_STMT initialisiert wird. Die Syntax ist wie folgt:
mysqli_stmt mysqli::stmt_init ( void )
Es gibt ein MySQLI_STMT -Objekt zurück, das der aktuellen Verbindung mit der ungebundenen Anweisung zugeordnet ist. Dieses Objekt kann dann verwendet werden, um Prepe () , Bind_param () , Execute () und andere Operationen durchzuführen.
Das folgende Beispiel zeigt, wie Benutzerinformationen über MySQLI :: STMT_INIT und Vorverarbeitungsanweisungen sicher aktualisiert werden können.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// Überprüfen Sie, ob die Verbindung erfolgreich ist
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
// Initialisieren Sie das Anweisungsobjekt
$stmt = $mysqli->stmt_init();
// Vorbereiten SQL Stellungnahme
if ($stmt->prepare("UPDATE users SET email = ? WHERE id = ?")) {
// Binden Sie Parameter:s Repräsentiert eine Zeichenfolge,i Zeigt Ganzzahlen an
$stmt->bind_param("si", $email, $id);
// Setzen Sie Parameterwerte
$email = "newemail@m66.net";
$id = 42;
// 执行Stellungnahme
if ($stmt->execute()) {
echo "Benutzerinformationen erfolgreich aktualisiert!";
} else {
echo "Update fehlgeschlagen: " . $stmt->error;
}
// 关闭Stellungnahme
$stmt->close();
} else {
echo "SQL Vorbereiten失败: " . $stmt->error;
}
$mysqli->close();
?>
Auch wenn der Benutzer die Eingabe in der Aktualisierungsanweisung überprüft hat, vermeiden Sie Spleißstrings, um SQL zu konstruieren. Vorverarbeitungsanweisungen können SQL -Injektionsangriffe effektiv verhindern.
Überprüfen Sie den Rückgabewert für Operationen wie STMT_INIT () , PREPET () , BIND_PARAM () und EXECUTE () . Dies kann Probleme früher erkennen und Fehler finden.
Die Fehlerbehandlung kann durch Aktivierung des Ausnahmodus vereinfacht werden:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Wenn ein Fehler aktiviert ist, macht ein Fehler eine Ausnahme, sodass es einfacher wird, mit der Versuchsstruktur zu fangen.
Jedes Mal, wenn Sie das Anweisungsobjekt verwenden, sollten Sie $ stmt-> close () aufrufen, um sicherzustellen, dass die Ressource veröffentlicht wird.
Wenn die Anzahl der Parameter nicht behoben ist, können Sie CALL_USER_FUNC_Array () verwenden, um die dynamische Parameterbindung zu implementieren. Dies ist sehr nützlich, wenn Batch -Updates oder Erstellen flexibler Aktualisierungsanweisungen.
Wenn in einer Operation mehrere Aktualisierungen beteiligt sind, sollten Sie eine Transaktion verwenden:
$mysqli->begin_transaction();
try {
// Multiple ausführen update arbeiten
$stmt1 = $mysqli->prepare("UPDATE ...");
$stmt1->bind_param(...);
$stmt1->execute();
$stmt2 = $mysqli->prepare("UPDATE ...");
$stmt2->bind_param(...);
$stmt2->execute();
$mysqli->commit();
} catch (Exception $e) {
$mysqli->rollback();
echo "Transaktion fehlgeschlagen: " . $e->getMessage();
}
Das Ausführen von Aktualisierungsanweisungen mit MySQLI :: STMT_INIT ist eine sehr empfohlene Möglichkeit, die Datenbank in PHP zu betreiben. Durch die Verwendung von Vorverarbeitungsanweisungen können wir die Sicherheit und Wartbarkeit unserer Programme verbessern. Die Kombination von Transaktions- und Fehlerbehandlungsmechanismen kann die allgemeine Robustheit weiter verbessern.