MySQLI_Prepare () wird verwendet, um eine SQL -Anweisung vorzubereiten, die ein MySQLi_stmt -Anweisungsobjekt zurückgibt. Zum Beispiel:
$mysqli = new mysqli("m66.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM users WHERE email = ?";
$stmt = $mysqli->prepare($sql);
if (!$stmt) {
die("Die Vorverarbeitung schlug fehl: " . $mysqli->error);
}
Hier, ? ist der Parameter -Platzhalter, und der spezifische Wert wird in Zukunft durch Bind_param gebunden.
Das Objekt von MySQLI_STMT unterstützt die Erfassung und Einstellung einiger Eigenschaften und ermöglicht die Kontrolle des Verhaltens von Vorverarbeitungsanweisungen. PHP bietet zwei verwandte Methoden:
attr_get ($ attr) : Erhält den aktuellen Wert des angegebenen Attributs.
attr_set ($ attr, $ value) : Legt den Wert des angegebenen Attributs fest.
Zu den von MySQLI unterstützten Attributkonstanten gehören beispielsweise:
MySQLI_STMT_ATTTR_UPDATE_MAX_LENGH : Steuert, ob die maximale Länge aktualisiert werden soll.
MySQLI_STMT_ATTR_CURSOR_TYPE : Cursor-Typ (wie Nicht-Cursor, schreibgeschütztes Cursor usw.).
MySQLI_STMT_ATTR_PREFETCH_ROWS : Die Anzahl der vorgeholkten Zeilen.
Angenommen, wir möchten Cursors verwenden, um große Datenmengen zu verarbeiten und zu vermeiden, dass alle Ergebnissätze gleichzeitig geladen werden. Wir können die Cursoreigenschaften festlegen:
$sql = "SELECT * FROM large_table WHERE category = ?";
$stmt = $mysqli->prepare($sql);
if (!$stmt) {
die("Die Vorverarbeitung schlug fehl: " . $mysqli->error);
}
// Setzen Sie den Cursortyp auf MYSQLI_CURSOR_TYPE_READ_ONLY
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
// Binden Sie Parameter
$category = 'books';
$stmt->bind_param("s", $category);
$stmt->execute();
// Holen Sie sich den aktuellen Cursortyp
$currentCursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo "Der aktuelle Cursortyp ist: " . $currentCursorType . PHP_EOL;
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$stmt->close();
$mysqli->close();
Das obige Beispiel zeigt, wie der Cursortyp nach Vorbereitung der Anweisung festgelegt und das aktuelle Attribut mit attr_get () verifiziert wird.
Setzen Sie vor dem Aufrufen von Execute () alle erforderlichen Eigenschaften so weit wie möglich, wie z. B. Cursor -Typ, vorgeholkte Zeilenzahl usw., um sicherzustellen, dass sie während der Ausführung wirksam werden können.
Sowohl die Einstellungen für die Vorverarbeitung als auch die Eigenschaft können fehlschlagen. Stellen Sie sicher, dass Sie den Rückgabewert erkennen und Fehler gut behandeln, um die Laufzeitabstürze zu vermeiden.
Cursortypen wirken sich auf Speicher und Leistung aus, insbesondere wenn es sich um große Ergebnissätze handelt, und die Verwendung von schreibgeschützten Cursoren ( MySQLI_Cursor_Type_Read_only ) ist normalerweise eine bessere Wahl.
Einige Eigenschaften werden möglicherweise nicht auf älteren Versionen von MySQL -Servern oder PHP -Versionen unterstützt. Sie müssen die Unterstützung der Zielumgebung während der Entwicklung bestätigen.
MySQLI_STMT :: attr_get und attr_set , das vernünftigerweise mysqli_prepare () kombiniert wird, können Ihre Datenbankvorgänge flexibler und effizienter machen und gleichzeitig die Sicherheit Ihres Codes beibehalten. Durch Festlegen geeigneter Eigenschaften, insbesondere Cursor und vorgeholkte Zeilenzahlen, können die Leistung und die Ressourcenverwendung beim Umgang mit großen Datenmengen erheblich optimiert werden.