La pagination de données est une caractéristique très courante et importante lors de l'utilisation de PHP pour manipuler les bases de données MySQL. La pagination peut réduire efficacement la pression de performance causée par le chargement de grandes quantités de données à la fois et améliorer l'expérience utilisateur. Pendant le processus de pagination, en particulier pour interroger de grands volumes de données, les instructions préparées sont souvent utilisées pour assurer la sécurité et les performances.
Cet article se concentrera sur la façon d'obtenir dynamiquement la longueur de la colonne de résultat de requête dans la logique de pagination en combinaison avec la fonction mysqli_stmt :: att_get , optimisant ainsi le processus de traitement des données.
mysqli_stmt :: att_get est une méthode dans le style orienté objet mysqli qui obtient les valeurs d'attribut des instructions prétraitées. Grâce à cette fonction, vous pouvez interroger des informations telles que la longueur de tampon de la colonne ( mysqli_stmt_attr_update_max_length ) et d'autres informations.
Utilisation typique de cette fonction:
$length = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
Ceci est très utile lors de la gestion de grands champs (tels que du texte , du blob ), et peut allouer dynamiquement l'espace mémoire approprié pour éviter la troncature.
La structure de l'instruction SQL couramment utilisée pour la pagination est la suivante:
SELECT column1, column2 FROM table_name LIMIT ?, ?
Parmi eux, le premier point d'interrogation est le décalage, et le deuxième point d'interrogation est le nombre d'enregistrements affichés sur chaque page (limite).
Dans PHP, après l'instruction de prétraitement lie ces deux paramètres, la requête est exécutée, puis les données sont obtenues ligne par ligne par ligne en liant la variable de résultat.
Dans le scénario de pagination, si la longueur du champ de requête est incertaine ou qu'il existe de grands champs, la connaissance de la longueur maximale du champ peut éviter la troncature des données et s'assurer que les données sont terminées.
Par exemple, lors de la liaison d'une variable de résultat, si la longueur de la colonne est connue, le tampon de la longueur correspondante peut être alloué dynamiquement.
L'exemple suivant montre comment obtenir la longueur de la colonne dans une requête de pagination et lier le résultat en combinaison avec mysqli_stmt :: att_get :
<?php
$mysqli = new mysqli('m66.net', 'username', 'password', 'database');
if ($mysqli->connect_errno) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$pageSize = 10;
$offset = ($page - 1) * $pageSize;
$sql = "SELECT id, title FROM articles LIMIT ?, ?";
$stmt = $mysqli->prepare($sql);
if (!$stmt) {
die("Le prétraitement a échoué: " . $mysqli->error);
}
// Lier les paramètres de pagination
$stmt->bind_param('ii', $offset, $pageSize);
$stmt->execute();
// Obtenez l'attribut de longueur de colonne,MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH Renvoie la longueur de tampon maximale de la colonne
$maxLength = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
// Ici pour la démonstration,Supposons que nous ne nous concentrions que sur la deuxième colonne(title)Longueur
// Obtenez la longueur du champ à travers les métadonnées(Les méthodes plus détaillées nécessitent généralement get_result() ou fetch_fields())
// Variables de résultat de liaison
$id = null;
$title = null;
$stmt->bind_result($id, $title);
// Lire les données
while ($stmt->fetch()) {
echo "ID: $id, Taille du tampon de longueur de titre: $maxLength, titre: $title<br>";
}
$stmt->close();
$mysqli->close();
?>
Dans cet exemple, ATTR_GET renvoie la longueur de tampon maximale de la colonne de déclaration de prétraitement actuelle. Vous pouvez utiliser cette valeur pour ajuster l'allocation des tampons dans le programme pour vous assurer que les champs importants ne sont pas tronqués.
mysqli_stmt :: att_get exige que l'instruction de prétraitement mysqli soit exécutée correctement avant de pouvoir renvoyer des informations de longueur précise.
Pour les requêtes multi-colonnes, Astr_get renvoie un attribut global et ne peut pas subdiviser les longueurs pour une seule colonne. Si vous devez contrôler avec précision la longueur d'une seule colonne, il est recommandé de combiner mysqli_result :: fetch_fields pour obtenir des métadonnées de champ.
Lors du traitement de grands champs, l'utilisation de cette méthode raisonnablement avec des variables de résultats de liaison peut améliorer l'intégrité des données.
mysqli_stmt :: att_get est une méthode utile dans les instructions de prétraitement mysqli. Surtout lorsque la manipulation des requêtes de pagination implique des champs de longueur incertaine, il peut aider les développeurs à obtenir dynamiquement des informations de longueur de champ et à éviter les problèmes de troncature des données. La combinaison des déclarations de prétraitement et de la logique de pagination peut efficacement améliorer la sécurité et l'efficacité des opérations de données.