Lorsque vous utilisez l'extension MySQLI de PHP pour les opérations de base de données, la fonction MySQLI_STMT :: ATTR_GET est utilisée pour obtenir la valeur d'attribut de l'instruction de prétraitement ( mysqli_stmt ). Cette fonction peut renvoyer false dans certains cas, ce qui indique généralement que la propriété est échouée. Cet article analysera en détail les raisons courantes pour lesquelles MySQLI_STMT :: ATTR_GET renvoie False et donnent des solutions correspondantes.
mysqli_stmt :: att_get doit passer dans une constante d'attribut juridique en tant que paramètre, tel que mysqli_stmt_attr_update_max_length . Si la constante d'attribut passée n'est pas valide ou non définie, la fonction renvoie false .
Exemple:
$mysqli = new mysqli('m66.net', 'user', 'pass', 'database');
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$attr = $stmt->attr_get(9999); // Constantes d'attribut illégales
if ($attr === false) {
echo "Échec d'obtenir des attributs,Les constantes d'attribut sont illégales ou non soutenues。";
}
Suggestions : veuillez consulter la documentation officielle pour vous assurer que les constantes d'attribut adoptées sont correctes et prises en charge.
Si l'objet $ STMT n'est pas créé avec succès ou $ stmt-> close () a été appelé, l'appel ATTR_GET échouera également.
Exemple:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
die("Échec de la déclaration:" . $mysqli->error);
}
$stmt->close();
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr === false) {
echo "Échec d'obtenir des attributs,L'objet de déclaration de prétraitement n'est pas disponible。";
}
Suggestion : confirmez que l'objet d'instruction de prétraitement est valide et non fermé avant d'appeler ATTR_GET .
Certaines versions PHP ou les versions MySQL Driver peuvent avoir des problèmes de compatibilité, ce qui fait que ATTR_GET ne fonctionne pas correctement, renvoyant faux .
suggestion :
Assurez-vous que les versions PHP et MySQL sont les versions stables officiellement recommandées.
Essayez de passer aux dernières versions de PHP et MySQL.
Testez dans différents environnements pour résoudre les problèmes environnementaux.
ATTR_GET nécessite que le paramètre entrant soit une constante d'attribut entier. Si une chaîne ou un autre type est passé, la fonction peut retourner false .
Exemple:
$attr = $stmt->attr_get("MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH"); // Mauvaise utilisation
if ($attr === false) {
echo "Échec d'obtenir des attributs,Erreur de type de paramètre。";
}
Recommandation : assurez-vous que les paramètres sont des constantes entières prédéfinies.
Dans de rares cas, les exceptions de connexion de la base de données ou les exceptions de l'état de ressource peuvent également faire revivre la fonction fausse .
suggestion :
Confirmez que la connexion de la base de données est stable.
Attraper et gérer les exceptions ou les erreurs possibles.
Utilisez $ mysqli-> Erreur et $ stmt-> Erreur pour obtenir des informations d'erreur détaillées.
Voici un exemple d'utilisation de mysqli_stmt :: att_get correctement:
$mysqli = new mysqli('m66.net', 'user', 'pass', 'database');
if ($mysqli->connect_error) {
die("Échec de la connexion:" . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
die("Échec de la déclaration:" . $mysqli->error);
}
$id = 1;
$stmt->bind_param("i", $id);
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($attr === false) {
echo "Échec d'obtenir des attributs,message d'erreur:" . $stmt->error;
} else {
echo "La valeur d'attribut est:" . $attr;
}
$stmt->close();
$mysqli->close();
Étiquettes associées:
mysqli_stmt