In PHP bietet MySQLI eine Vielzahl von Möglichkeiten, um MySQL -Datenbanken zu betreiben, in denen vorbereitete Aussagen die SQL -Injektion effektiv verhindern können. MySQLI :: STMT_INIT und BIND_PARAM sind zwei Funktionen, die bei der Implementierung von Vorverarbeitungsanweisungen üblicherweise verwendet werden. In diesem Artikel wird vorgestellt, wie diese beiden Funktionen für die Parameterbindung korrekt verwendet werden.
MySQLI :: STMT_INIT ist eine Methode in der MySQLI -Klasse, mit der eine leere Vorverarbeitungsanweisung initialisiert wird. Diese Methode führt keine SQL -Abfrage aus, sondern bereitet nur ein Anweisungsobjekt vor.
Die Methode Bind_param wird verwendet, um die tatsächlichen Parameter in eine Vorverarbeitungsanweisung zu binden. Bei der Ausführung von SQL -Abfragen ersetzen diese gebundenen Parameter Platzhalter in der SQL -Anweisung.
Der grundlegende Prozess der Verwendung von MySQLI :: STMT_INIT und BIND_PARAM in PHP ist wie folgt:
Stellen Sie eine Verbindung zur Datenbank her : Erstens müssen Sie über die MySQLI -Klasse eine Verbindung zur Datenbank herstellen.
Erstellen Sie eine Vorverarbeitungsanweisung : Erstellen Sie ein Vorverarbeitungsanweisungsobjekt über STMT_INIT .
Bind -Parameter : Verwenden Sie die Methode Bind_param , um den Benutzereingabwert an den Platzhalter in der Vorverarbeitungsanweisung zu binden.
Ausführungsanweisung : Führen Sie die SQL -Abfrage mit guten Parametern aus.
Verarbeitungsergebnisse : Erhalten Sie die Abfrageergebnisse und führen Sie Vorgänge aus.
Hier ist ein einfacher Beispielcode, der zeigt, wie MySQLI :: STMT_INIT und BIND_PARAM für die Parameterbindung verwendet werden.
<?php
// 1. Erstellen Sie eine Datenbankverbindung
$mysqli = new mysqli("localhost", "user", "password", "database");
// Überprüfen Sie, ob die Verbindung erfolgreich ist
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
// 2. Erstellen Sie eine Vorverarbeitungsanweisung
$stmt = $mysqli->stmt_init();
if ($stmt === false) {
die("Die Initialisierungsanweisung ist fehlgeschlagen");
}
// 3. Vorbereiten SQL Abfrage
$sql = "SELECT name, email FROM users WHERE age = ? AND status = ?";
// 4. Binden Sie Parameter
if ($stmt->prepare($sql)) {
// 假设我们要Abfrage年龄为 30 Und der Status ist 'active' Benutzer
$age = 30;
$status = 'active';
// verwenden bind_param Binden Sie Parameter
// 'i' Zeigt ganzzahliger Typ an,'s' Repräsentiert den String -Typ
$stmt->bind_param('is', $age, $status);
// 5. 执行Abfrage
$stmt->execute();
// 6. 获取Abfrage结果
$result = $stmt->get_result();
// 输出Abfrage结果
while ($row = $result->fetch_assoc()) {
echo "Name: " . $row['name'] . " - Email: " . $row['email'] . "<br>";
}
// 7. Aussage
$stmt->close();
}
// 8. Schließen Sie die Datenbankverbindung
$mysqli->close();
?>
Stellen Sie eine Verbindung zur Datenbank her : Erstellen Sie zunächst eine Datenbankverbindung über neue MySQLI und führen Sie die Fehlerbehandlung durch.
Erstellen Sie eine Vorverarbeitungsanweisung : Initialisieren Sie das Vorverarbeitungsanweisungsobjekt über $ mysqli-> stmt_init () . Wenn Falsch zurückgegeben wird, bedeutet dies, dass die Initialisierung fehlgeschlagen ist.
SQL Query vorbereiten : SQL -Abfrage durch die Vorbereitung Methode vorbereiten, wo ? ist ein Platzhalter, der auf Bindung durch Bind_param wartet.
Bind -Parameter : Die Methode Bind_param empfängt zwei Parameter:
Der erste Parameter ist eine Typ -Zeichenfolge, die den Typ jedes Parameters angibt. Zum Beispiel: 'I' repräsentiert einen Ganzzahltyp, 's' repräsentiert den String-Typ und 'D' doppelte Precision-Gleitpunktzahl.
Die zweite und nachfolgende Parameter sind die tatsächlichen Variablen, die an die SQL -Abfrage gebunden sind.
Abfrage ausführen : Verwenden Sie die Methode aus , um Vorverarbeitungsanweisungen auszuführen, und die tatsächliche SQL -Abfrage wird an die Datenbank gesendet.
Abfragenergebnisse erhalten : Holen Sie sich das ausgeführte Ergebnis über get_result , und Sie können Fetch_assoc verwenden, um jede Datenreihe zu erhalten.
Aussagen und Verbindungen schließen : Schließlich schließen Sie die Anweisungen und Datenbankverbindungen nach der Ausführung der Abfrage.
In der tatsächlichen Entwicklung können die an Bind_Param gebundenen Parameter von vielen Typen sein, einschließlich Ganzzahlen, Zeichenfolgen, schwimmenden Punktzahlen usw. GEMEINIGE TYPEN werden wie folgt beschrieben:
I : Ganzzahltyp (int).
D : Doppelpräzisions -Schwimmpunkttyp (doppelt).
S : String -Typ (Zeichenfolge).
B : Blob Typ (Binärdaten).
Bind_param bindet nach Bedarf die Parameter an SQL -Abfragen basierend auf diesen Typen.
Die Reihenfolge der Platzhalter muss mit der Reihenfolge der gebundenen Parameter übereinstimmen : Die Reihenfolge der Platzhalter in der SQL -Abfrage muss mit der Reihenfolge der gebundenen Parameter übereinstimmen.
Überprüfen Sie auf Fehler : Wenn Sie Methoden wie STMT_INIT , PREVORY und BIND_PARAM verwenden, wird empfohlen, den Rückgabewert immer zu überprüfen, um potenzielle Fehler zu vermeiden.
SQL -Injektionsschutz : Die Verwendung von Vorverarbeitungsanweisungen und Bindungsparametern ist ein wirksames Mittel zur Verhinderung der SQL -Injektion.
Durch die Verwendung der Funktionen von MySQLI :: STMT_INIT und BIND_PARAM können Entwickler die SQL -Injektion problemlos verhindern und die Sicherheit und Stabilität von Datenbankvorgängen sicherstellen. Der Prozess der Bindungsparameter ist einfach und effizient, insbesondere für Abfragen, die die Benutzereingabe verarbeiten müssen.
Ich hoffe, dass die Erklärung dieses Artikels Ihnen helfen kann, besser zu verstehen, wie diese beiden Funktionen für sichere Datenbankvorgänge in PHP verwendet werden können.