Lorsque vous utilisez PHP pour les opérations de base de données, la fonction MySQLI_STMT :: bind_param () est un outil très important qui peut lier les paramètres aux instructions de requête SQL et éviter les attaques d'injection SQL. Cette fonction convient particulièrement aux instructions de prétraitement, et son type de paramètre spécifie comment gérer les valeurs transmises à la requête. Cet article fournira une description détaillée des types de paramètres communs pour la fonction mysqli_stmt :: bind_param () et utilisez des exemples pour aider à comprendre comment l'utiliser dans le développement réel.
Tout d'abord, passons en revue la syntaxe de base de la fonction bind_param () :
<span><span><span class="hljs-keyword">bool</span></span><span> mysqli_stmt::</span><span><span class="hljs-variable constant_">bind_param</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$types</span></span><span> , </span><span><span class="hljs-keyword">mixed</span></span><span> &</span><span><span class="hljs-variable">$var</span></span><span> , </span><span><span class="hljs-keyword">mixed</span></span><span> &$... )
</span></span>
$ Types : une chaîne contenant un ou plusieurs caractères représentant le type de la variable liée. Chaque caractère représente le type d'un paramètre.
$ var, $ ... : Ce sont les variables que vous souhaitez lier, et elles seront liées dans l'ordre spécifié dans les types $ .
Où chaque caractère de la chaîne $ types représente un type de données. Les types de caractères courants sont:
I : représente un entier.
D : représente le numéro flottant à double précision (double).
S : représente la chaîne.
B : Données représentant le type BLOB (grand objet binaire).
I est utilisé pour lier les paramètres entiers. Il est l'un des types les plus courants et convient à toutes les données entières.
Exemple:
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = ?"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"i"</span></span><span>, </span><span><span class="hljs-variable">$id</span></span><span>); </span><span><span class="hljs-comment">// $idC'est un entier</span></span><span>
</span><span><span class="hljs-variable">$id</span></span><span> = </span><span><span class="hljs-number">1</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>
Dans cet exemple, $ id est lié comme un type entier à l'espace réservé dans l'instruction de requête ? .
D est utilisé pour lier les paramètres du type de nombre flottant à double précision, généralement utilisé dans les requêtes impliquant des nombres décimaux ou des points flottants.
Exemple:
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO products (price) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"d"</span></span><span>, </span><span><span class="hljs-variable">$price</span></span><span>); </span><span><span class="hljs-comment">// $priceC'est un numéro flottant à double précision</span></span><span>
</span><span><span class="hljs-variable">$price</span></span><span> = </span><span><span class="hljs-number">199.99</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>
Dans cet exemple, $ Price est lié à un espace réservé dans l'instruction SQL en tant que type de numéro flottant à double précision.
S est l'un des types les plus courants pour la liaison des paramètres de chaîne. Qu'il s'agisse de données texte ou de chaînes sous forme numérique, S est requis.
Exemple:
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE username = ?"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>); </span><span><span class="hljs-comment">// $usernameC'est une chaîne</span></span><span>
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">"john_doe"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>
Dans cet exemple, $ nom d'utilisateur est lié à un type de chaîne et la requête recherche l'utilisateur correspondant via le nom d'utilisateur.
B est utilisé pour lier les données binaires, telles que les données de type blob telles que les images ou les fichiers. Ce type est souvent utilisé pour gérer de grands volumes de données ou des fichiers binaires.
Exemple:
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO images (image_data) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"b"</span></span><span>, </span><span><span class="hljs-variable">$imageData</span></span><span>); </span><span><span class="hljs-comment">// $imageDataCe sont des données binaires</span></span><span>
</span><span><span class="hljs-variable">$imageData</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">"path/to/image.jpg"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>
Dans cet exemple, $ imagedata est lié à l'instruction de requête en tant que données binaires, qui est généralement utilisée pour insérer les données de fichiers.
Lorsqu'il y a plusieurs espaces réservés dans une instruction SQL, Bind_param () peut lier plusieurs variables, et le type de chaque variable est représenté par des caractères dans les types $ , et l'ordre doit être cohérent avec l'espace réservé.
Exemple:
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"UPDATE users SET name = ?, age = ? WHERE id = ?"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"ssi"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>, </span><span><span class="hljs-variable">$id</span></span><span>);
</span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">"Alice"</span></span><span>;
</span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">30</span></span><span>;
</span><span><span class="hljs-variable">$id</span></span><span> = </span><span><span class="hljs-number">1</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>
Dans cet exemple, $ le nom est lié à une ( s ) chaîne (s), $ Âge est lié à un entier ( i ), et $ id est lié à un entier ( i ). Le paramètre $ Types est "SSI" , qui est cohérent avec l'ordre de type des trois espaces réservés.
Type Strict Match : Lorsque vous appelez bind_param () , vous devez vous assurer que le type de variable lié correspond strictement au type spécifié dans la chaîne $ types , sinon cela entraînera une erreur ou un résultat inattendu.
Passer des références aux valeurs : bind_param () nécessite de passer des références aux paramètres, pas des valeurs. Si vous transmettez des valeurs directement au lieu de références, la fonction ne gérera pas correctement ces paramètres.
Corrélation entre le type de paramètre et le type de base de données : En usage réel, le type de paramètre lié doit être déterminé en fonction du type de données du champ dans la table de base de données. Si le champ de la base de données est de type de numéro flottant, utilisez d ; S'il est de type de chaîne, utilisez S.
MySQLI_STMT :: bind_param () est une fonction très importante pour empêcher les paramètres de requête SQL et de traitement SQL. En utilisant correctement ses types de paramètres, vous pouvez vous assurer que les opérations de base de données sont plus sûres et plus efficaces. Dans le développement réel, la compréhension et l'utilisation correcte de ces types de caractères amélioreront considérablement la maintenabilité et la sécurité du code.
Les types communs incluent les entiers ( I ), les nombres flottants à double précision ( D ), les chaînes ( s ) et les données binaires ( b ). Lors de la gestion des opérations de base de données complexes, la liaison correcte du type de chaque paramètre garantit que l'instruction de requête est exécutée comme prévu et protège les données des attaques potentielles d'injection SQL.