Bei der Verwendung von PHP zum Betrieb von MySQL -Datenbanken bietet die MySQLI -Erweiterung eine Unterstützung für eine reichhaltige Vorverarbeitungsanweisungen (vorbereitete Aussagen), die die SQL -Injektionsangriffe effektiv verhindern und die Sicherheit und Effizienz von Datenbankoperationen verbessern kann. Dieser Artikel konzentriert sich darauf, ein Anweisungsobjekt mithilfe der Methode MySQLI :: STMT_INIT zu initialisieren und SQL -Anweisungen über das Objekt auszuführen.
MySQLI :: STMT_INIT () ist eine Methode der MySQLI -Klasse, mit der ein leeres Anweisungsobjekt ( mysqli_stmt ) initialisiert wird. Dieses Objekt kann an SQL Query -Anweisungen gebunden werden , indem sie prepect () -Methode aufruft und weiter bezeichnet und weiter bezeichnet wird.
Die grundlegende Syntax ist wie folgt:
$stmt = $mysqli->stmt_init();
wobei $ MySQLI ein MySQLi -Objekt ist, das mit der Datenbank verbunden wurde.
Hier ist ein vollständiges PHP -Beispiel mit STMT_Init -Initialisierungsanweisung und Ausführung von SQL -Abfragen:
<?php
// Datenbankverbindung
$mysqli = new mysqli("localhost", "username", "password", "database");
// Überprüfen Sie die Verbindung
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
// Initialisieren Sie das Anweisungsobjekt
$stmt = $mysqli->stmt_init();
// Vorverarbeitung SQL Stellungnahme
if ($stmt->prepare("SELECT name, email FROM users WHERE id = ?")) {
// Binden Sie Parameter
$id = 1;
$stmt->bind_param("i", $id);
// 执行Stellungnahme
$stmt->execute();
// Bindungsergebnisvariablen
$stmt->bind_result($name, $email);
// Abfragenergebnisse erhalten
while ($stmt->fetch()) {
echo "Benutzername: $name, Post: $email<br>";
}
// 关闭Stellungnahme
$stmt->close();
} else {
echo "SQL Vorverarbeitung失败: " . $stmt->error;
}
// Schließen Sie die Verbindung
$mysqli->close();
?>
Nach dem Aufrufen von STMT_INIT () müssen Sie die Methode Prepe () verwenden, um die SQL -Anweisung tatsächlich zu binden.
Die Typparameter in bind_param (), zum Beispiel "I", repräsentiert eine Ganzzahl, und "S" repräsentiert eine Zeichenfolge, muss korrekt eingestellt werden.
Nennen Sie $ STMT-> close (), nachdem Sie das Anweisungsobjekt verwendet haben, um die Ressource freizugeben.
Obwohl Sie $ MySQLI-> prepe () für die Erstellung von Anweisungen direkt verwenden können, bietet STMT_INIT () eine detailliertere Steuerung, z. B. nützlicher, wenn Sie prüfen müssen, ob die Anweisung wiederverwendbar ist, oder eine Schnittstelle auf niedriger Ebene verwenden.