Aktueller Standort: Startseite> Neueste Artikel> Wie man attr_get in Laravel in Laravel zusammenfasst

Wie man attr_get in Laravel in Laravel zusammenfasst

M66 2025-05-22

Bei der Verwendung von Laravel für die PHP -Entwicklung verwendet das Framework standardmäßig eloquente ORM und PDO für Datenbankoperationen. In einigen Szenarien können Entwickler aus Kompatibilitäts- oder Leistungsgründen jedoch direkt Funktionen verwenden, die von der MySQLI -Erweiterung bereitgestellt werden, um mit der Datenbank zu interagieren. Mysqli_stmt :: attr_get ist eine Methode der MySQLI_stmt -Klasse, mit der Anweisungseigenschaften erhalten werden.

Um bequemer MySQLi_stmt :: attr_get in Laravel -Projekten zu verwenden, können wir sie zusammenfassen und Datenbankverbindungen und Anweisungslogik einheitlich verwalten. Im Folgenden sind das spezifische Verpackungsschema und die Implementierungsschritte aufgeführt.

1. Erstellen Sie eine benutzerdefinierte Datenbankdienstklasse

Zunächst können wir im Laravel -Projekt eine Serviceklasse erstellen, um native MySQLI -Operationen wie MySQLIService zu verkörpern.

Erstellen Sie die Datei mySQLIService.php im App/Services -Verzeichnis:

 <?php

namespace App\Services;

class MysqliService
{
    protected $mysqli;

    public function __construct()
    {
        $this->connect();
    }

    protected function connect()
    {
        $this->mysqli = new \mysqli(
            env('DB_HOST', 'localhost'),
            env('DB_USERNAME', 'root'),
            env('DB_PASSWORD', ''),
            env('DB_DATABASE', 'forge'),
            env('DB_PORT', 3306)
        );

        if ($this->mysqli->connect_error) {
            throw new \Exception('Connect Error (' . $this->mysqli->connect_errno . ') ' . $this->mysqli->connect_error);
        }
    }

    public function prepare($query)
    {
        $stmt = $this->mysqli->prepare($query);
        if (!$stmt) {
            throw new \Exception('Prepare failed: ' . $this->mysqli->error);
        }
        return $stmt;
    }

    public function getStatementAttribute($stmt, int $attr)
    {
        if (!($stmt instanceof \mysqli_stmt)) {
            throw new \InvalidArgumentException('Invalid statement object provided.');
        }

        return $stmt->attr_get($attr);
    }

    public function close()
    {
        if ($this->mysqli) {
            $this->mysqli->close();
        }
    }
}

2. Registrieren Sie Service Containerbindung

Um MySQLIService in Controllern oder anderen Klassen zu verwenden, kann die Servicebindung in AppServiceProvider durchgeführt werden.

App/Anbieter bearbeiten/AppServiceProvider.php :

 use App\Services\MysqliService;

public function register()
{
    $this->app->singleton(MysqliService::class, function ($app) {
        return new MysqliService();
    });
}

3. Methoden zur Verwendung von Verpackungen im Controller

Jetzt können wir MySQLIService direkt im Controller verwenden und die Methode GetStatementAttribute aufrufen, um die Anweisungsattribute zu erhalten.

Der Beispielcode lautet wie folgt:

 use App\Services\MysqliService;

class DatabaseController extends Controller
{
    protected $mysqliService;

    public function __construct(MysqliService $mysqliService)
    {
        $this->mysqliService = $mysqliService;
    }

    public function showAttribute()
    {
        $stmt = $this->mysqliService->prepare("SELECT * FROM users WHERE email = ?");
        $stmt->bind_param("s", $email);
        $email = "test@m66.net";

        $stmt->execute();

        // Angenommen, wir wollen erhalten MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH Eigentum
        $attrValue = $this->mysqliService->getStatementAttribute($stmt, MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);

        $stmt->close();
        $this->mysqliService->close();

        return response()->json(['attribute_value' => $attrValue]);
    }
}

4.. Dinge zu beachten

  • Attr_get ist eine relativ selten verwendete Methode von MySQLI_STMT , und nicht alle PHP -Umgebungen ermöglichen diese Erweiterungsmethode standardmäßig. Die Verfügbarkeit sollte vor dem Einsatz bestätigt werden.

  • Wenn Sie native MySQLI -Operationen in Laravel verwenden, wird empfohlen, sie als Serviceschicht zu verkörpern und die Protokollierung und Ausnahmebehandlung in Betracht zu ziehen, um die Robustheit des Systems zu gewährleisten.

  • Während MySQLI in einigen Szenarien niedrigere Kontrollfunktionen verfügt, bietet Laravels eloquentes und Querybauer höhere Abstraktionen auf höherer Ebene, die in den meisten Fällen besser für die tägliche Entwicklung geeignet sind.

Durch die obige Kapselungsmethode können wir mySQLI_STMT :: attr_get in Laravel elegant aufrufen, um eine zentralisierte Verwaltung von Datenbankverbindungen und -attributen zu erreichen, wodurch der Code klarer und wartbarer wird.