In PHP bietet die MySQLI -Erweiterung leistungsstarke Funktionen für die Interaktion mit MySQL -Datenbanken. STMT_INIT und BIND_PARAM sind zwei häufig verwendete Funktionen für vorbereitete Anweisungen und Parameterbindung. Viele Entwickler sind jedoch anfällig für häufigste Fehler, wenn diese beiden Funktionen verwendet werden, insbesondere bei Bindungsparametertypen. In diesem Artikel wird die richtige Verwendung dieser Funktionen korrekt verwendet, insbesondere wie die korrekte Verwendung von Typ -Zeichenfolgen sichergestellt wird, um potenzielle Fehler zu vermeiden.
Die MySQLI :: STMT_INIT -Methode wird verwendet, um eine Vorverarbeitungsanweisung zu initialisieren, die ein MySQLI_STMT -Objekt zurückgibt, durch das Abfrage- und Bindungsparameter ausgeführt werden können. Die Methode Bind_param wird verwendet, um Variablen an Platzhalter in Vorverarbeitungsanweisungen zu binden (normalerweise ? ). Bei der Bindung müssen Sie den Datentyp für jeden Parameter angeben.
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("INSERT INTO users (name, age) VALUES (?, ?)")) {
$name = "John Doe";
$age = 25;
// Binden Sie Parameter
$stmt->bind_param("si", $name, $age); // 's' Repräsentiert eine Zeichenfolge,'i' Zeigt Ganzzahlen an
// Ausführungsanweisung
$stmt->execute();
echo "Record inserted successfully!";
} else {
echo "Error: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
In diesem Beispiel verwenden wir Bind_Param , um den Namen $ und $ Alter an den Platzhalter in der SQL -Abfrage zu binden. Die Typ -Zeichenfolge "si" bedeutet, dass $ name eine Zeichenfolge ist und $ Age eine Ganzzahl ( i ) ist.
Der erste Parameter von bind_param ist eine Zeichenfolge, die den Typ jedes gebundenen Parameters angibt. Gemeinsame Typen sind:
I : Ganzzahl
D : doppelte Präzision schwimmende Punktzahl (doppelt)
S : String (String)
B : Binärdaten (Blob)
Es ist wichtig sicherzustellen, dass Sie den richtigen Typ für jeden Parameter angeben, da eine falsche Bindung von Typen dazu führen kann, dass Abfragebefehler oder Daten falsch in die Datenbank eingefügt werden.
$stmt->bind_param("si", $age, $name); // Fehler,Die Bestellung ist falsch
In diesem Beispiel ist die Bindungsreihenfolge falsch, da $ Age eine Ganzzahl ist, die mit dem Typ 'I' verwendet werden sollte, und $ name ist eine Zeichenfolge, die mit Typ 's' verwendet werden sollte.
Typen Sie Mismatch: MySQL gibt einen Fehler zurück, wenn Sie versuchen, eine Variable des String -Typs an einen Ganzzahl -Platzhalter zu binden oder eine Ganzzahl an einen Platzhaltertyp zu binden. Stellen Sie sicher, dass Sie den Datentyp für jeden Parameter verstehen, und verwenden Sie die korrekte Typ -Zeichenfolge in bind_param .
Initialisieren Sie Variablen, bevor Sie BIND_PARAM verwenden: Bevor Sie Bind_param verwenden, um Variablen zu binden, stellen Sie sicher, dass Sie alle Variablen initialisiert haben. Un nicht initialisierte Variablen veranlasst PHP einen Fehler.
Verhindern Sie die SQL -Injektion: Verwenden vorbereiteter Anweisungen und Parameterbindungen verhindern nicht nur die SQL -Injektion, sondern stellt auch die Richtigkeit von Datentypen sicher. Auf diese Weise kann MySQL es auch dann korrekt verarbeiten, wenn die vom Benutzer eingegebenen Daten den erwarteten Typ nicht erfüllen.
In der tatsächlichen Entwicklung übergeben wir häufig URLs und andere Daten als Parameter in SQL -Abfragen. Hier ist ein Beispiel für die Verarbeitung von URLs, bei dem wir alle Domänennamen durch m66.net ersetzen, um die Datenkonsistenz sicherzustellen.