Position actuelle: Accueil> Derniers articles> Mysqli_stmt :: bind_param et attr_get d'utilisation de l'ordre

Mysqli_stmt :: bind_param et attr_get d'utilisation de l'ordre

M66 2025-05-22

Lors de l'utilisation de l'extension MySQLI de PHP pour les opérations d'instructions de prétraitement, MySQLI_STMT :: bind_param est une méthode très courante pour la liaison des paramètres dans des instructions de prétraitement. D'un autre côté, MySQLI_STMT :: ATTR_GET est utilisé pour obtenir les propriétés de l'instruction de prétraitement. La question de savoir si l'ordre de l'appel de ces deux méthodes affectera le résultat et que l'attribute est tenu d'appeler Bind_param en toute sécurité est une question qui concerne de nombreux développeurs.

Le rôle de mysqli_stmt :: bind_param

La méthode Bind_param est utilisée pour lier les variables aux marques de paramètres (points d'interdiction) dans une instruction de prétraitement. La fonction centrale de cette méthode est d'implémenter les requêtes paramétrées pour empêcher l'injection de SQL et améliorer l'efficacité de l'exécution. L'utilisation de base est la suivante:

 $stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$id = 1;
$stmt->bind_param("i", $id);
$stmt->execute();

Ici "je" signifie que le type de paramètre de la borne est un entier.

Le rôle de mysqli_stmt :: att_get

ATTR_GET est utilisé pour obtenir les propriétés des instructions de prétraitement, telles que MySQLI_STMT_ATTR_UPDATE_MAX_LENGTH , etc. Il est généralement utilisé pour le débogage ou dans certains cas particuliers pour vérifier l'état des instructions de prétraitement.

Par exemple:

 $max_length = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
echo "Max length updated: " . $max_length;

Avez-vous d'abord d'appeler ATTR_GET?

Normalement, Astr_get n'est pas une étape nécessaire pour effectuer des paramètres de liaison. Bind_param peut être appelé directement, tant que l'instruction de prétraitement a été préparée avec succès, le type de paramètre de liaison et la variable sont corrects.

L'ordre d'appel est recommandé comme suit:

  1. $ stmt = $ mysqli-> prépare ($ sql);

  2. $ stmt-> bind_param ($ types, ... $ vars);

  3. $ stmt-> execute ();

L'appel ATTR_GET est facultatif, principalement utilisé pour obtenir des informations d'attribut et n'a pas de dépendance directe entre les paramètres de liaison.

L'effet de l'ordre des appels sur le résultat

  • Appel Attr_get d'abord puis bind_param :
    Cela n'affecte pas l'exécution de Bind_param , à condition que l'instruction de prétraitement soit prête. ATTR_GET obtient simplement l'attribut et ne modifiera pas l'état des paramètres liés.

  • Appelez Bind_Param d'abord puis ATTR_GET :
    Cela n'affectera pas la valeur des attributs d'obtention d'attR_get , et l'ordre de l'appel n'a aucun effet sur la fonction.

En résumé, il n'y a pas de dépendance stricte de l'ordre d'appel entre Astr_get et Bind_param , les deux sont indépendants les uns des autres, et Astr_get est généralement une opération facultative.

Exemple de code