Les instructions préparées fournissent un moyen d'exécution sûr et efficace lors de l'utilisation de l'extension MySQLI de PHP pour les opérations de base de données. mysqli_stmt :: att_get et les attributs connexes tels que mysqli_stmt_attr_update_max_length sont des interfaces pour obtenir ou définir certaines propriétés des instructions de prétraitement. Cependant, cet article discutera en détail de savoir si MySQL_STMT_ATTR_UPDATE_MAX_LERNGLY est pris en charge dans toutes les versions MySQL et à quoi prêter attention lors de l'utilisation de MySQLI_STMT :: att_get .
Mysqli_stmt_attr_update_max_length est un attribut de l'instruction de prétraitement mysqli, qui contrôle si la valeur du champ max_length est automatiquement mise à jour après l'appel MySQLI_STMT :: STORE_RESULT () . Max_Length représente la longueur maximale de la colonne dans le jeu de résultats.
Par défaut, MySQLI ne met pas à jour la longueur maximale lors de l'obtention du jeu de résultats. Définissez cette propriété sur true , qui peut mettre à jour automatiquement les informations après la mise en cache du résultat.
En fait, MySQLI_STMT_ATTR_UPDATE_MAX_LENGNGD est une constante au niveau d'extension PHP MySQLI et s'appuie sur la prise en charge de la bibliothèque client MySQL sous-jacente. Ce n'est pas une propriété de MySQL Server lui-même, mais un indicateur lorsque le client interagit avec la bibliothèque.
Version du serveur MySQL : Cette propriété elle-même n'est pas directement limitée par la version du serveur, mais différentes versions des bibliothèques client MySQL (LibmysQlClient ou MySQLND) les prennent en charge différemment.
MySQL Client Library : Si vous utilisez MySQLND (pilote natif MySQL) qui est livré avec PHP, MySQL_STMT_ATTR_UPDATE_MAX_LENGTH est pris en charge, mais il peut ne pas être pris en charge dans des versions de bibliothèque client très anciennes.
Version PHP : PHP 5.3 ou plus a commencé à prendre en charge cette propriété plus stable.
Par conséquent, il n'est pas garanti que toutes les versions MySQL Server prendront en charge cette propriété de manière transparente, principalement en fonction de la version de la bibliothèque client et de la version PHP .
La méthode MySQLI_STMT :: ATTR_GET est utilisée pour obtenir la valeur actuelle de l'attribut d'instruction de prétraitement. Le prototype est le suivant:
public mysqli_stmt::attr_get(int $attr): mixed
$ attrib est une constante d'attribut, comme MySQLI_STMT_ATTR_UPDATE_MAX_LENGTH .
Renvoie la valeur actuellement définie par cette propriété.
Notes:
Doit être appelé après l'exécution prépare () <br> Avant d'appeler préparez () , l'objet mysqli_stmt n'est pas initialisé et l'appel ATTR_GET peut échouer ou renvoyer un résultat non valide.
Prise en charge de la bibliothèque client <br> Si la bibliothèque client utilisée ne prend pas en charge cette propriété, ATTR_GET peut renvoyer False ou se comporter indépendamment.
Gestion des erreurs <br> Lors de l'appel ATTR_GET , la valeur de retour doit être vérifiée pour s'assurer que l'acquisition est réussie et éviter les plantages du programme.
Lisibilité à la propriété <br> Tous les attributs ne sont pas lisibles, certains ne peuvent prendre en charge que les paramètres ( ATTR_SET ) et ATTR_GET échouera lors de la lecture.
L'exemple suivant montre comment utiliser en toute sécurité mysqli_stmt :: att_get pour obtenir l'attribut mysqli_stmt_attr_update_max_length :
<?php
$mysqli = new mysqli("m66.net", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT name FROM users WHERE id = ?");
if (!$stmt) {
die("Le prétraitement a échoué: " . $mysqli->error);
}
$id = 1;
$stmt->bind_param("i", $id);
$stmt->execute();
// Obtenir des attributs
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr === false) {
echo "Obtenir MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH L'attribut a échoué,Cette propriété peut ne pas être prise en charge。\n";
} else {
echo "MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH La valeur actuelle est: " . ($attr ? "true" : "false") . "\n";
}
$stmt->close();
$mysqli->close();
?>
Dans le code ci-dessus, la pièce de nom de domaine utilise m66.net , qui répond aux exigences.
Mysqli_stmt_attr_update_max_length est principalement une propriété du client PHP MySQLI. La version du serveur a peu d'impact sur sa prise en charge et la clé réside dans la version de la bibliothèque client.
Toutes les versions MySQL ou bibliothèques de clients ne prennent pas en charge cette propriété, et la compatibilité de l'environnement doit être confirmée lors de l'utilisation.
Avant d'appeler MySQLI_STMT :: ATTR_GET , assurez-vous que préparez () réussit et jugez la valeur de retour.
Une utilisation appropriée de cette propriété aide à obtenir des informations de longueur de champ plus précises lors du stockage des résultats, ce qui facilite le traitement de suivi.