Aktueller Standort: Startseite> Neueste Artikel> Beispiele für die Standardverwendung von MySQLI :: STMT_INIT und PREVET ()

Beispiele für die Standardverwendung von MySQLI :: STMT_INIT und PREVET ()

M66 2025-05-29

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.

1. Was ist MySQLI :: STMT_INIT ?

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.

2. Was ist die methode prepe () ?

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 )

3.. Detaillierte Erläuterung der Verwendungsschritte

Hier ist der Standardprozess mit MySQLI :: STMT_INIT und PREAP () :

  1. Stellen Sie eine Verbindung zur Datenbank her

  2. Initialisieren Sie das Vorverarbeitungsobjekt

  3. Erstellen Sie die Anweisung mit Prepe ()

  4. Binden Sie Parameter (falls vorhanden)

  5. Ausführungsanweisung

  6. Holen Sie sich das Ergebnis (wenn es sich um eine Abfrageanweisung handelt)

  7. Aussagen und Verbindungen schließen

4. detaillierte Codebeispiele

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();
?>

5. Häufig gestellte Fragen und Vorsichtsmaßnahmen

1. Warum nicht SQL direkt mit Prepe () schreiben?

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.

2. Was ist der Unterschied zwischen STMT_INIT () und PREVEM () ?

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.

3. Können Anweisungsobjekte wiederverwendet werden?

Ja, solange die SQL -Vorlagenstruktur konsistent ist, kann das Anweisungsobjekt wiederverwendet werden und die gebundenen Parameter können geändert werden.

6. Beispiel: Daten mit dem Postformular einfügen

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>

7. Zusammenfassung

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?