Position actuelle: Accueil> Derniers articles> Utilisez ATTR_GET pour ajuster dynamiquement la méthode d'extraction des données

Utilisez ATTR_GET pour ajuster dynamiquement la méthode d'extraction des données

M66 2025-05-24

Dans l'extension MySQLI de PHP, l'objet MySQLI_STMT fournit de nombreuses méthodes pour préparer et exécuter des instructions de prétraitement. Parmi eux, la fonction mysqli_stmt :: att_get peut être utilisée pour obtenir la valeur d'attribut de la poignée de l'instruction actuelle. En lisant dynamiquement ces attributs, nous pouvons contrôler de manière plus flexible l'extraction des données et le comportement de fonctionnement, répondant ainsi aux besoins de la base de données dans différents scénarios.

Cet article expliquera en détail l'utilisation de la fonction mysqli_stmt :: att_get . Sur la base des exemples réels, il montre comment utiliser cette fonction pour ajuster dynamiquement la méthode d'extraction des données pour obtenir une interaction de base de données plus efficace et flexible.

1. Introduction à la fonction MySQLI_STMT :: ATTR_GET

mysqli_stmt :: att_get est l'une des méthodes de prétraitement des objets d'instructions dans mysqli. Sa fonction principale est de renvoyer la valeur d'attribut spécifiée de la poignée de l'instruction. Le prototype de fonction est le suivant:

 public mysqli_stmt::attr_get(int $attr): mixed
  • Paramètre $ att : La valeur constante de l'attribut, qui définit le type d'attribut à obtenir, tel que le type de jeu de résultats, etc.

  • Valeur de retour: la valeur actuelle de l'attribut correspondant, le type spécifique dépend de l'attribut.

Cette méthode est souvent utilisée avec att_set . En définissant et en obtenant des attributs, nous pouvons contrôler dynamiquement le comportement d'exécution des instructions MySQLI.

2. Constantes d'attribut couramment utilisées

  • Mysqli_stmt_attr_cursor_type : spécifie le type de curseur, qui est utilisé pour déterminer comment le jeu de résultats est récupéré (par exemple, s'il faut utiliser les curseurs côté serveur).

  • Mysqli_stmt_attr_prefetch_rows : contrôle le nombre de lignes de résultat pré-gravées, affectant les performances et l'utilisation de la mémoire.

  • Mysqli_stmt_attr_update_max_length : Lorsque vous activez, obtenez la longueur maximale du champ de chaîne.

  • Mysqli_stmt_attr_execute_timeout : temps de temps mort pour l'exécution de l'instruction.

En lisant et en ajustant dynamiquement ces propriétés, nous pouvons choisir la méthode d'extraction appropriée en fonction des besoins de l'entreprise.

3. Exemple pratique: ajustez dynamiquement la méthode d'extraction des données

Supposons que nous ayons besoin d'interroger une grande quantité de données, et nous voulons contrôler si toutes les données prélectées ou le charger à la demande en définissant le type de curseur, contrôlant ainsi l'utilisation de la mémoire.

 <?php
$mysqli = new mysqli("m66.net", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("Échec de la connexion: " . $mysqli->connect_error);
}

// Déclaration de préparation
$stmt = $mysqli->prepare("SELECT id, name FROM users WHERE status = ?");

$status = 1;
$stmt->bind_param("i", $status);

// Définir le type de curseur sur le curseur côté serveur,Évitez de charger tous les résultats à la fois
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);

// Instruction d&#39;exécution
$stmt->execute();

// Lire le type de curseur actuel,Confirmer que la configuration est réussie
$currentCursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);

echo "Le type de curseur actuel est: " . $currentCursorType . PHP_EOL;

// Variables de résultat de liaison
$stmt->bind_result($id, $name);

// Obtenir des résultats par ligne,Enregistrer la mémoire
while ($stmt->fetch()) {
    echo "utilisateurID: $id, nom: $name" . PHP_EOL;
}

$stmt->close();
$mysqli->close();
?>

Dans cet exemple, nous définissons le type de curseur sur un curseur en lecture seule serveur ( mysqli_cursor_type_read_only ) via ATTR_SET , afin que les résultats ne soient pas chargés en mémoire à la fois, mais seront extraits en ligne au besoin. Utilisez ensuite ATTR_GET pour obtenir le type de curseur actuel pour vérifier que le paramètre est réussi.

Cette méthode d'ajustement dynamique est particulièrement adaptée à la gestion de grandes requêtes de données, ce qui peut réduire efficacement la pression de la mémoire et améliorer la stabilité de l'application.

4. Implémentez la stratégie d'extraction des données adaptative avec att_get

Dans les projets réels, nous pouvons d'abord appeler Astr_get pour obtenir les paramètres actuels et sélectionner différentes stratégies d'extraction en fonction de différents environnements ou paramètres, par exemple:

 // Obtenez le nombre actuel de lignes pré-gravées
$prefetchRows = $stmt->attr_get(MYSQLI_STMT_ATTR_PREFETCH_ROWS);

if ($prefetchRows > 100) {
    // Si le nombre de lignes prélectées est grande,Adopter le curseur côté serveur
    $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
} else {
    // sinon,Tous les prélevés par défaut
    $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_NO_CURSOR);
}

De cette manière, le programme peut changer dynamiquement des méthodes d'extraction de données en fonction de l'état de la base de données actuel ou de l'environnement de fonctionnement pour réaliser des opérations de base de données plus intelligentes et flexibles.

5. Résumé

  • mysqli_stmt :: att_get nous permet d'obtenir la valeur d'attribut de l'instruction prétraitée et peut ajuster de manière flexible le comportement d'exécution de mysqli avec att_set .

  • En contrôlant dynamiquement, des attributs tels que le type de curseur et le nombre de lignes de préposcture, le traitement de l'ensemble de résultats plus efficace peut être réalisé et adapté à différents scénarios commerciaux.

  • Combiné avec les résultats de lecture de ATTR_GET , la logique de fonctionnement de la base de données adaptative peut être écrite pour améliorer la robustesse et les performances du système.