Vorbereitete Aussagen sind ein wichtiges Mittel, um die Datensicherheit zu gewährleisten und die Effizienz bei der Verwendung von MySQLI -Erweiterungen in PHP zu verbessern. In diesem Artikel wird die korrekte Verwendung der MySQLI :: STMT_INIT -Funktion und der Methode mySQLI :: STMT_INIT vorgestellt und sie in Kombination mit tatsächlichen Beispielen analysiert.
MySQLI :: STMT_INIT ist eine von MySQLI bereitgestellte Methode, um ein leeres Objekt mySQLI_STMT (Anweisung) zu initialisieren. Dieses Objekt kann dann verwendet werden, um SQL -Anweisungen vorzubereiten.
Die Syntax ist wie folgt:
mysqli_stmt mysqli::stmt_init ( void )
Es wird normalerweise mit der Methode prepe () zur Erstellung von SQL -Anweisungen verwendet.
Die Methode Prepe () wird verwendet, um eine SQL -Anweisung vorzubereiten, die später ausgeführt wird und mit dem Parameter gebunden werden kann. Dies kann die SQL -Injektionsangriffe effektiv verhindern.
Die Syntax ist wie folgt:
bool mysqli_stmt::prepare ( string $query )
Hier ist der Standardprozess mit MySQLI :: STMT_INIT und PREAP () :
Stellen Sie eine Verbindung zur Datenbank her
Initialisieren Sie das Vorverarbeitungsobjekt
Erstellen Sie die Anweisung mit Prepe ()
Binden Sie Parameter (falls vorhanden)
Ausführungsanweisung
Holen Sie sich das Ergebnis (wenn es sich um eine Abfrageanweisung handelt)
Aussagen und Verbindungen schließen
Angenommen, wir haben eine Benutzertabelle -Benutzer mit Feldern: ID , Benutzername , E -Mail . Wir möchten die E -Mail -Adresse des Benutzers basierend auf dem Benutzernamen abfragen.
<?php
// Erster Schritt:Stellen Sie eine Datenbankverbindung her
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");
// Überprüfen Sie, ob die Verbindung erfolgreich ist
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
// Schritt 2:Initialisieren Sie das Vorverarbeitungsobjekt
$stmt = $mysqli->stmt_init();
// Schritt 3:Vorbereiten SQL Stellungnahme
$sql = "SELECT email FROM users WHERE username = ?";
if (!$stmt->prepare($sql)) {
die("SQL Die Vorverarbeitung schlug fehl: " . $stmt->error);
}
// Schritt 4:Binden Sie Parameter
$username = "testuser";
$stmt->bind_param("s", $username); // "s" Repräsentiert den String -Typ
// Schritt 5:执行Stellungnahme
$stmt->execute();
// Schritt 6:Binden Sie die Ergebnisse und erhalten Sie die Daten
$stmt->bind_result($email);
if ($stmt->fetch()) {
echo "Benutzer -E -Mail ist: " . $email;
} else {
echo "Dieser Benutzer wurde nicht gefunden。";
}
// Schritt 7:关闭Stellungnahme与连接
$stmt->close();
$mysqli->close();
?>
Obwohl SQL mit der Methode query () direkt ausgeführt werden kann, ist dies für SQL -Injektionsangriffe anfällig. Bindungsvorbereitung () und Parameter können dieses Problem effektiv verhindern.
stmt_init () erstellt ein leeres Anweisungsobjekt und lädt die SQL -Vorlage in sie ein. Sie können auch STMT_INIT () überspringen und $ MySQLi-> Preped () direkt aufrufen, um die Initialisierung und Vorbereitung in einem Schritt zu vervollständigen.
Ja, solange die SQL -Vorlagenstruktur konsistent ist, kann das Anweisungsobjekt wiederverwendet werden und die gebundenen Parameter können geändert werden.
Das folgende Beispiel zeigt, wie Daten über ein Formular übermittelt werden und diese sicher in die Datenbank einfügen:
<?php
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"] ?? "";
$email = $_POST["email"] ?? "";
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {
$stmt->bind_param("ss", $username, $email);
if ($stmt->execute()) {
echo "Benutzerregistrierung erfolgreich!";
} else {
echo "Ausführung fehlgeschlagen:" . $stmt->error;
}
$stmt->close();
}
}
$mysqli->close();
?>
<form method="POST" action="https://m66.net/register.php">
Benutzername:<input type="text" name="username" required><br>
Post:<input type="email" name="email" required><br>
<input type="submit" value="registrieren">
</form>
Die Kombination von MySQLI :: STMT_INIT und PREAP () bietet einen leistungsstarken Datenbanksicherheitsmechanismus für PHP. Die Parameterbindung verhindert nicht nur die SQL -Injektion, sondern verbessert auch die Ausführungseffizienz. In der tatsächlichen Entwicklung wird empfohlen, immer Vorverarbeitungsanweisungen zu verwenden, um die Datenbank zu betreiben.
Möchten Sie weiterhin mehr über die erweiterte Verwendung von Bind_param () und Bind_result () in MySQLI erfahren?