Lorsque vous utilisez PHP pour les opérations de base de données MySQL, la fonction MySQLI_STMT :: ATTR_GET est souvent utilisée pour obtenir des attributs liés à l'instruction préparés. Si vous rencontrez une exception dans le programme en cours d'exécution ou ne pouvez pas obtenir de propriétés normalement, les développeurs doivent souvent déterminer si le problème se situe dans la fonction MySQLI_STMT :: ATTR_GET lui-même ou la connexion de la base de données. Cet article combinera des exemples de code PHP pour analyser en détail comment distinguer efficacement les deux.
La fonction MySQLI_STMT :: ATTR_GET est utilisée pour obtenir l'attribut d'instruction de prétraitement spécifié. Par exemple, il peut être utilisé pour obtenir des informations pertinentes sur les paramètres de liaison:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $userId);
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
Si l'appel échoue, cette fonction reviendra généralement fausse .
Les problèmes de connexion de la base de données incluent principalement:
Impossible de se connecter au serveur de base de données
Erreur d'information de connexion (nom d'utilisateur, mot de passe, port, etc.)
Temps d'arrêt du serveur de base de données ou anomalie du réseau
Ces problèmes se produisent généralement lors de la création d'objets MySQLI ou provoquent l'échec de la création de déclaration de prétraitement ultérieure.
Avant tout appel à Attr_get , confirmez si la connexion de la base de données est normale:
$mysqli = new mysqli("m66.net", "user", "password", "database");
if ($mysqli->connect_errno) {
die("Échec de la connexion à la base de données: " . $mysqli->connect_error);
}
Si la connexion échoue, le problème est clairement au niveau de la connexion de la base de données.
Une fois la connexion normale, la création d'instructions de prétraitement doit également être vérifiée:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
die("La création de déclaration de prétraitement a échoué: " . $mysqli->error);
}
Si une erreur est rapportée ici, cela signifie que bien que la connexion de la base de données soit normale, il y a un problème avec l'instruction SQL ou la phase de préparation.
Seulement après le succès des deux étapes ci-dessus, appelez ATTR_GET :
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr === false) {
echo "attr_getL'appel de fonction a échoué,message d'erreur:" . $mysqli->error;
} else {
echo "attr_getValeur de retour:" . $attr;
}
Si l'appel ATTR_GET échoue, le problème est plus susceptible de mentir avec la fonction MySQLI_STMT :: ATTR_GET elle-même ou ses paramètres.
<?php
$mysqli = new mysqli("m66.net", "user", "password", "database");
if ($mysqli->connect_errno) {
die("Échec de la connexion à la base de données: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
die("La création de déclaration de prétraitement a échoué: " . $mysqli->error);
}
$userId = 1;
$stmt->bind_param("i", $userId);
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr === false) {
echo "attr_getL'appel de fonction a échoué,message d'erreur:" . $mysqli->error;
} else {
echo "attr_getValeur de retour:" . $attr;
}
?>
Une panne de connexion de la base de données entraînera directement la création de l'objet MySQLI , et il y a généralement des invites d'erreur claires.
La création de l'instruction de prétraitement a échoué , ce qui indique que la connexion est normale, mais il y a un problème avec la syntaxe SQL ou les autorisations.
L'appel ATTR_GET échoue , ce qui est très probablement dû à une erreur de paramètre de fonction ou à un problème de compatibilité de version.
En vérifiant progressivement, en confirmant d'abord la connexion de la base de données, puis en vérifiant la préparation de l'instruction et enfin à déboguer ATTR_GET pour localiser avec précision la source du problème.