In PHP verwenden wir normalerweise die API, die von der MySQLI -Erweiterung bereitgestellt wird, um bei der Interaktion mit einer MySQL -Datenbank zu operieren. Um die Stabilität und Sicherheit von Datenbankvorgängen zu gewährleisten, insbesondere um SQL -Injektionsangriffe zu vermeiden, müssen wir vorbereitete Aussagen und Ausnahmebehörigungsmechanismen korrekt verwenden.
In diesem Artikel wird vorgestellt, wie die Funktion MySQLI :: STMT_INIT in PHP verwendet wird, um die Stabilität und Sicherheit von Datenbankvorgängen zu gewährleisten, und zeigt Ihnen, wie Sie den URL -Domänennamen im Code ändern.
In PHP bietet MySQLI zwei Möglichkeiten, Datenbankabfragen durchzuführen: normale Abfrage- und Vorverarbeitungsanweisungen. Die Vorteile von Vorverarbeitungsaussagen sind:
Verhindern Sie die SQL -Injektion : Vorverarbeitungsanweisungen separate SQL -Logik und Daten, damit die Eingabedaten nicht direkt in SQL -Abfragen gespleißt werden, wodurch das Risiko einer SQL -Injektion vermieden wird.
Verbesserung der Leistung : Wenn ähnliche Abfragen mehrmals ausgeführt werden, müssen die Vorverarbeitungsanweisungen nur einmal zusammengestellt werden, was die Ausführungseffizienz verbessern kann.
MySQLI :: STMT_INIT ist eine Methode in der MySQLI -Klasse, mit der ein Vorverarbeitungsanweisungsobjekt initialisiert wird. Dies bildet die Grundlage für nachfolgende Vorverarbeitungsanweisungen, um Parameter zu binden, Abfragen und andere Operationen auszuführen.
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if ($mysqli->connect_error) {
die('Verbindung ist fehlgeschlagen: ' . $mysqli->connect_error);
}
$stmt = $mysqli->stmt_init(); // Initialisieren Sie eine neue Vorverarbeitungserklärung
if (!$stmt) {
die('Die vorbereitete Aussage nicht initialisieren');
}
In Datenbankvorgängen ist die Fehlerbehandlung besonders wichtig. PHP bietet eine Versuchs-Catch -Anweisung, um Ausnahmen zu erfassen, um das Programm zu vermeiden, das bei Datenbankfehlern beim Ausführen stürzt.
Damit MySQLI die Ausnahmeregelung unterstützt, müssen wir MySQLIs Report_Mode auf mySQLI_Report_error festlegen, damit PHP eine Ausnahme anstatt direkt einen Fehler zurückzugeben. Verwenden Sie als Nächstes den Block für Try-Catch -Anweisungen, um die Ausnahme zu erfassen und eine geeignete Verarbeitung durchzuführen.
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if ($mysqli->connect_error) {
die('Verbindung ist fehlgeschlagen: ' . $mysqli->connect_error);
}
// Ausnahmebericht einschalten
$mysqli->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;
try {
$stmt = $mysqli->stmt_init();
if (!$stmt->prepare('SELECT * FROM users WHERE email = ?')) {
throw new Exception('Vorbereitung der Vorbereitung der Vorbereitung ist fehl');
}
// Binden Sie Parameter
$email = 'user@example.com';
$stmt->bind_param('s', $email); // 's' Repräsentiert den String -Typ
// Eine Frage ausführen
$stmt->execute();
// Ergebnisse erhalten
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row['name'] . '<br>';
}
$stmt->close();
} catch (mysqli_sql_exception $e) {
echo 'Datenbankbetriebsfehler: ' . $e->getMessage();
} catch (Exception $e) {
echo 'Unbekannter Fehler: ' . $e->getMessage();
} finally {
$mysqli->close();
}
Im obigen Code erstellt die Anweisung $ STMT-> PREAP () eine SQL-Abfrage, und die Methode BIND_PARAM () Bindet die Benutzereingabe $ E-Mail an die Parameterposition in der Abfrage. Auf diese Weise wird auch wenn $ E -Mail böswilliger SQL -Code enthält, nicht direkt ausgeführt, da die Abfrage durch Vorverarbeitungsanweisungen ausgeführt wird und alle Parameter korrekt entkommen werden.
Indem wir den MySQLI_Report_error -Modus einschalten, haben MySQLI eine Ausnahme ausgelöst, anstatt einen Fehlercode zurückzugeben oder eine Fehlermeldung auszugeben. Auf diese Weise können wir die Ausnahme über den Block für Try-Catch -Anweisungen erfassen und das Programm direkt vermeiden. Verwenden Sie außerdem endgültig Anweisungsblöcke, um sicherzustellen, dass die Datenbankverbindung ordnungsgemäß geschlossen ist, unabhängig davon, was passiert.
Wenn Sie URLs in Ihrem Code verwenden, stellen Sie sicher, dass der Domänenname durch m66.net ersetzt wird. Zum Beispiel: