In der MySQLI -Erweiterung von PHP bietet das Objekt von MySQLI_STMT viele Methoden zur Vorbereitung und Ausführung von Vorverarbeitungsanweisungen. Unter ihnen kann die Funktion mySQLI_STMT :: attr_get verwendet werden, um den Attributwert des aktuellen Anweisungsgriffs zu erhalten. Durch das dynamische Lesen dieser Attribute können wir die Datenextraktion und das Betriebsverhalten flexibler steuern und damit die Datenbankanforderungen in verschiedenen Szenarien entsprechen.
In diesem Artikel wird die Verwendung der Funktion mySQLi_stmt :: attr_get im Detail erläutert. Basierend auf tatsächlichen Beispielen zeigt es, wie diese Funktion verwendet wird, um die Datenextraktionsmethode dynamisch anzupassen, um eine effizientere und flexiblere Datenbankinteraktion zu erzielen.
Mysqli_stmt :: attr_get ist eine der Methoden für die Vorverarbeitung von Anweisungsobjekten in MySQLI. Seine Hauptfunktion besteht darin, den angegebenen Attributwert des Anweisungsgriffs zurückzugeben. Der Funktionsprototyp lautet wie folgt:
public mysqli_stmt::attr_get(int $attr): mixed
Parameter $ Attr : Der konstante Wert des Attributs, der den zu erhaltenen Attributtyp definiert, z. B. den Ergebnis -Set -Typ usw.
Rückgabewert: Der aktuelle Wert des entsprechenden Attributs hängt der spezifische Typ vom Attribut ab.
Diese Methode wird oft mit attr_set verwendet. Durch das Einstellen und Erhalten von Attributen können wir das Ausführungsverhalten von MySQLI -Anweisungen dynamisch steuern.
MySQLI_STMT_ATTTR_CURSOR_TYPE : Gibt den Cursor-Typ an, der verwendet wird, um zu bestimmen, wie das Ergebnissatz abgerufen wird (z. B., ob die serverseitigen Cursoren verwendet werden).
MySQLI_STMT_ATTR_PREFETCH_ROWS : Steuert die Anzahl der vorgeholkten Ergebniszeilen und beeinflusst die Leistung und den Speicherverbrauch.
Mysqli_stmt_attr_update_max_length : Wenn aktiviert, erhalten Sie die maximale Länge des String -Feldes.
MySQLI_STMT_ATTR_EXECUTE_TIMEOUT : Zeitüberschreitungszeit für die Ausführung der Anweisung.
Durch das dynamische Lesen und Anpassen dieser Eigenschaften können wir die entsprechende Extraktionsmethode entsprechend den geschäftlichen Anforderungen auswählen.
Angenommen, wir müssen eine große Datenmenge abfragen, und wir möchten steuern, ob alle Daten vorlegen oder sie auf Bedarf laden, indem wir den Cursortyp festlegen und damit die Speicherverwendung steuern.
<?php
$mysqli = new mysqli("m66.net", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
// Vorbereitungserklärung
$stmt = $mysqli->prepare("SELECT id, name FROM users WHERE status = ?");
$status = 1;
$stmt->bind_param("i", $status);
// Setzen Sie den Cursortyp auf serverseitigem Cursor,Vermeiden Sie es, alle Ergebnisse auf einmal zu beladen
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
// Ausführungsanweisung
$stmt->execute();
// Lesen Sie den aktuellen Cursortyp,Bestätigen Sie, dass das Setup erfolgreich ist
$currentCursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo "Der aktuelle Cursortyp ist: " . $currentCursorType . PHP_EOL;
// Bindungsergebnisvariablen
$stmt->bind_result($id, $name);
// Erhalten Sie Ergebnisse nach Zeile,Speicher speichern
while ($stmt->fetch()) {
echo "BenutzerID: $id, Name: $name" . PHP_EOL;
}
$stmt->close();
$mysqli->close();
?>
In diesem Beispiel setzen wir den Cursor-Typ auf einen schreibgeschützten Server-Seiten-Cursor ( mysqli_cursor_type_read_only ) über attr_set , so dass die Ergebnisse nicht sofort in den Speicher geladen werden, sondern nach Bedarf die Zeile für die Zeile extrahiert werden. Verwenden Sie dann Attr_get , um den aktuellen Cursor -Typ zu erhalten, um zu überprüfen, ob die Einstellung erfolgreich ist.
Diese dynamische Anpassungsmethode eignet sich besonders für den Umgang mit großen Datenabfragen, was den Speicherdruck effektiv verringern und die Anwendungsstabilität verbessern kann.
In den tatsächlichen Projekten können wir zunächst Attr_get anrufen, um die aktuellen Einstellungen zu erhalten und verschiedene Extraktionsstrategien gemäß verschiedenen Umgebungen oder Parametern auszuwählen, z. B. nach:
// Holen Sie sich die aktuelle Anzahl der vorgelagten Zeilen
$prefetchRows = $stmt->attr_get(MYSQLI_STMT_ATTR_PREFETCH_ROWS);
if ($prefetchRows > 100) {
// Wenn die Anzahl der vorgelagten Zeilen groß ist,Adoptieren Sie den serverseitigen Cursor
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
} else {
// ansonsten,Alle standardmäßig vorgeholt
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_NO_CURSOR);
}
Auf diese Weise kann das Programm die Datenextraktionsmethoden basierend auf dem aktuellen Datenbankstatus oder Betriebsumfeld dynamisch wechseln, um intelligentere und flexiblere Datenbankvorgänge zu erreichen.
MySQLI_STMT :: attr_get ermöglicht es uns, den Attributwert der vorverarbeiteten Anweisung zu erhalten, und kann das Ausführungsverhalten von MySQLI mit attr_set flexibel anpassen.
Durch die dynamische Steuerung von Attributen wie Cursortyp und Vorabfindung der Zeilenzahl kann eine effizientere Ergebnissatzverarbeitung erreicht und an verschiedene Geschäftsszenarien angepasst werden.
In Kombination mit den Lesergebnissen der Attr_get kann die adaptive Datenbankbetriebslogik geschrieben werden, um die Robustheit und Leistung des Systems zu verbessern.