Lorsque vous utilisez l'extension MySQLI de PHP pour les opérations de base de données, MySQLI :: REAL_CONNECT et MYSQLI_STMT :: att_get sont deux fonctions importantes qui sont relativement bas et facilement négligées. Le premier est utilisé pour établir une connexion de base de données, tandis que le second peut être utilisé pour obtenir des états d'attribut d'instructions de prétraitement. Dans le développement réel, la compréhension et l'utilisation correcte de ces deux fonctions sont très importantes pour améliorer la stabilité et les performances des opérations de base de données. Cet article analysera la méthode d'utilisation correcte de mysqli_stmt :: att_get , et combine le processus d'utilisation de MySqli :: Real_Connect pour fournir des précautions et des meilleures pratiques pertinentes.
MySQLI :: REAL_CONNECT est une méthode fournie par l'extension MySQLI pour initialiser manuellement et établir une connexion au serveur MySQL. Par rapport à la méthode de connexion automatique dans le constructeur, Real_Connect offre une plus grande flexibilité. Par exemple:
$mysqli = mysqli_init();
if (!$mysqli) {
die('mysqli_init failed');
}
if (!$mysqli->real_connect('localhost', 'user', 'password', 'database')) {
die('Connect Error: (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
}
Lorsque nous utilisons Real_Connect , nous initialisons généralement l'objet de connexion ( mysqli_init () ) avant d'appeler, afin que nous puissions effectuer plus de configuration granulaire avant de se connecter, tels que la définition d'options de connexion ou l'activation des connexions SSL.
mysqli_stmt :: att_get est une nouvelle fonction ajoutée dans PHP 8.2. Il nous permet d'obtenir les propriétés d'un objet de prétraitement ( mysqli_stmt ). Les utilisations courantes incluent l'obtention des paramètres de résultats du tampon, la longueur maximale du tampon et d'autres paramètres, à des fins de diagnostic et de débogage.
int|false mysqli_stmt::attr_get(int $attribute)
Mysqli_stmt_attr_update_max_length : renvoie si la mise à jour maximale de longueur de champ est actuellement activée.
Mysqli_stmt_attr_cursor_type : renvoie le type de curseur.
Mysqli_stmt_attr_prefetch_rows : renvoie le nombre de lignes préfectées.
La condition préalable à l'appel MySQLI_STMT :: ATTR_GET est que vous avez créé un objet mysqli_stmt correctement. Par exemple:
$mysqli = new mysqli('localhost', 'user', 'password', 'database');
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
À l'heure actuelle, $ stmt est un objet MySQLI_STMT valide. Il est sûr d'appeler ATTR_GET uniquement après la préparation des succès:
$cursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
if ($cursorType !== false) {
echo "Cursor type: " . $cursorType;
} else {
echo "Unable to retrieve cursor type.";
}
mysqli_stmt :: att_get est une fonction qui n'a été prise en charge que depuis PHP 8.2.0. Dans l'ancienne version, la méthode n'existait pas. Pour éviter les erreurs d'exécution, il est recommandé d'effectuer des vérifications de version avant d'appeler:
if (PHP_VERSION_ID >= 80200) {
$value = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
} else {
echo "actuel PHP Version non prise en charge mysqli_stmt::attr_get。";
}
Dans certains scénarios, il n'est pas logique d'obtenir simplement des attributs, et ce qui est vraiment pratique, c'est de vérifier après l'avoir réglé. Par exemple:
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_SCROLLABLE);
$cursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
Cette combinaison peut être utilisée pour garantir que vos paramètres ont été appliqués correctement.
La connexion doit être valide : si MySQLI :: Real_Connect échoue, les opérations d'instructions suivantes (y compris Préparent et Astr_get ) échoueront. La connexion doit être assurée en premier.
Tous les pilotes ne prennent pas en charge les propriétés : différents pilotes MySQL peuvent prendre en charge les propriétés différemment. Certaines propriétés peuvent renvoyer les valeurs par défaut ou ne sont pas prises en charge, et la tolérance aux défauts doit être effectuée lors de l'appel.
L'instruction de prétraitement doit exister : ATTR_GET est une méthode de l'objet d'instruction. Si vous l'appelez sur un objet d'instruction invalide ou non initialisé, une erreur sera signalée.
Le débogage est principalement utilisé : ATTR_GET est actuellement principalement utilisé dans les scénarios de débogage et n'affecte pas directement la logique de requête. Dans un environnement de production, il n'est généralement que d'une importance substantielle de l'utiliser en conjonction avec Attr_set .
Voici un exemple d'utilisation complet montrant comment se connecter à une base de données, préparer des instructions et obtenir des propriétés:
$mysqli = mysqli_init();
$mysqli->real_connect('localhost', 'user', 'password', 'database');
$stmt = $mysqli->prepare("SELECT * FROM articles WHERE category_id = ?");
if ($stmt === false) {
die("Prepare failed: " . $mysqli->error);
}
if (PHP_VERSION_ID >= 80200) {
$value = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
echo "Mettre à jour le réglage de longueur maximale: " . ($value ? 'Activer' : '未Activer');
} else {
echo "PHP La version est trop basse,pas disponible attr_get。";
}
$stmt->close();
$mysqli->close();
Dans les projets réels, vous pouvez encapsuler ces opérations dans une classe ou une fonction pour améliorer la réutilisabilité et la maintenabilité.
Bien que MySQLI_STMT :: ATTR_GET soit une fonction qui est de bas niveau et n'est pas utilisée fréquemment, son existence est indispensable lorsqu'elle est nécessaire de contrôler avec précision et de déboguer le comportement de la base de données. Après avoir réussi à établir la connexion avec MySQLI :: Real_Connect , en veillant à ce que l'opération sur l'objet d'instruction soit efficace et est la base de l'utilisation d'attruts . Avec la mise à jour de la version PHP, la fonction peut fonctionner dans plus de scénarios à l'avenir, il est donc nécessaire de comprendre son utilisation et ses limites.
Enfin, il est rappelé que le comportement de l'environnement de développement et de l'environnement de production peut être différent. Avant d'utiliser ATTR_GET , assurez-vous que la version du pilote est compatible et effectuez une gestion des exceptions.
Pour afficher l'exemple d'adresse d'interface, vous pouvez vous référer au format suivant: