Position actuelle: Accueil> Derniers articles> Meilleures pratiques pour l'utilisation d'attra_get avec mysqli_prepare ()

Meilleures pratiques pour l'utilisation d'attra_get avec mysqli_prepare ()

M66 2025-05-27

MySQLI_PREPARE () est utilisé pour préparer une instruction SQL, qui renvoie un objet d'instruction MySQLI_STMT . Par exemple:

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

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

$sql = "SELECT * FROM users WHERE email = ?";
$stmt = $mysqli->prepare($sql);

if (!$stmt) {
    die("Le prétraitement a échoué: " . $mysqli->error);
}

Ici, ? est l'espace réservé au paramètre, et la valeur spécifique sera liée via Bind_param à l'avenir.

2. Le rôle de mysqli_stmt :: att_get et att_set

L'objet MySQLI_STMT prend en charge l'acquisition et le réglage de certaines propriétés, permettant le contrôle du comportement des instructions de prétraitement. PHP fournit deux méthodes connexes:

  • att_get ($ att) : obtient la valeur actuelle de l'attribut spécifié.

  • ATTR_SET ($ att, $ Value) : définit la valeur de l'attribut spécifié.

Par exemple, les constantes d'attribut soutenues par MySQLI incluent:

  • Mysqli_stmt_attr_update_max_length : contrôle s'il faut mettre à jour la longueur maximale.

  • Mysqli_stmt_attr_cursor_type : définissez le type de curseur (comme le non-curseur, le curseur en lecture seule, etc.).

  • Mysqli_stmt_attr_prefetch_rows : le nombre de lignes préfabriquées.

3. Exemples combinant mysqli_prepare () et att_get

Supposons que nous voulons utiliser des curseurs pour traiter de grandes quantités de données et éviter de charger tous les ensembles de résultats à la fois, nous pouvons définir les propriétés du curseur:

 $sql = "SELECT * FROM large_table WHERE category = ?";
$stmt = $mysqli->prepare($sql);

if (!$stmt) {
    die("Le prétraitement a échoué: " . $mysqli->error);
}

// Définissez le type de curseur sur MYSQLI_CURSOR_TYPE_READ_ONLY
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);

// Lier les paramètres
$category = 'books';
$stmt->bind_param("s", $category);

$stmt->execute();

// Obtenez le type de curseur actuel
$currentCursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo "Le type de curseur actuel est: " . $currentCursorType . PHP_EOL;

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    print_r($row);
}

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

L'exemple ci-dessus montre comment définir le type de curseur après avoir préparé l'instruction et vérifier l'attribut actuel avec att_get () .

4. Recommandations de meilleures pratiques

4.1 Propriétés prédéfinies

Avant d'appeler EXECUTE () , définissez toutes les propriétés requises autant que possible, telles que le type de curseur, le nombre de lignes préfabriqué, etc., pour s'assurer qu'ils peuvent prendre effet pendant l'exécution.

4.2 Erreurs de capture et exceptions

Les paramètres de prétraitement et de propriété peuvent échouer. Assurez-vous de détecter la valeur de retour et de gérer bien les erreurs pour éviter les accidents de course.

4.3 Sélectionnez raisonnablement le type de curseur en fonction de vos besoins

Les types de curseur affectent la mémoire et les performances, et surtout lorsqu'ils traitent de grands ensembles de résultats, l'utilisation de curseurs en lecture seule ( mysqli_cursor_type_read_only ) est généralement un meilleur choix.

4.4 Compatibilité avec différentes versions MySQL

Certaines propriétés peuvent ne pas être prises en charge sur les anciennes versions des serveurs MySQL ou des versions PHP. Vous devez confirmer le soutien de l'environnement cible pendant le développement.

5. Conclusion

Combiner raisonnablement mysqli_prepare () , mysqli_stmt :: att_get et att_set peut rendre vos opérations de base de données plus flexibles et efficaces tout en conservant la sécurité de votre code. En définissant les propriétés appropriées, en particulier les curseurs et les dénombrements de lignes prédéfinis, les performances et l'utilisation des ressources peuvent être considérablement optimisées lorsqu'ils traitent de grandes quantités de données.