Aktueller Standort: Startseite> Neueste Artikel> Best Practices für die Verwendung von attr_get mit MySQLI_Prepare ()

Best Practices für die Verwendung von attr_get mit MySQLI_Prepare ()

M66 2025-05-27

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.

2. Die Rolle von MySQLi_stmt :: attr_get und attr_set

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.

3. Beispiele, die mySQLi_prepare () und attr_get kombiniert werden

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.

4. Empfehlungen Best Practice

4.1 Voreinstellungseigenschaften

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.

4.2 Fehler und Ausnahmen fangen

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.

4.3 Wählen Sie vernünftigerweise den Cursortyp nach Ihren Anforderungen aus

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.

4.4 Kompatibilität mit verschiedenen MySQL -Versionen

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.

5. Schlussfolgerung

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.