Maison > Article > développement back-end > Comment traduire des chaînes en MSSQL en php
Il est courant de connecter PHP au serveur MSSQL, mais lors de la traduction de chaînes, vous rencontrez souvent divers problèmes. Cet article explique comment définir et traduire correctement des chaînes MSSQL en PHP.
1. La différence entre String et Varchar
Dans SQL Server, lors de la définition du type de chaîne, vous pouvez utiliser les types char, varchar et nvarchar. Parmi eux, le type char définit des chaînes de longueur fixe, et varchar et nvarchar définissent des chaînes de longueur variable.
En PHP, les variables de chaîne sont généralement utilisées pour traiter les données texte, et la longueur de chaîne est généralement appelée la longueur de la chaîne ou le nombre de mots. La façon dont la longueur d'une chaîne est exprimée en PHP est basée sur le nombre d'octets codés en interne, et non sur le nombre de caractères dans la chaîne.
Lorsque PHP est connecté au serveur MSSQL, la conversion des codages de caractères est généralement utilisée car les codages de caractères entre eux sont différents. Lors du passage de chaînes entre PHP et MSSQL, le codage de la chaîne doit être utf-8, sinon des problèmes d'incompatibilité des jeux de caractères se produiront.
2. Traduction de chaînes dans MSSQL
Lors de la construction de requêtes SQL à partir d'une entrée utilisateur, les chaînes doivent être manipulées avec prudence. Le fait de ne pas effectuer correctement l'échappement des chaînes pourrait permettre aux attaquants d'ajouter du code malveillant aux requêtes SQL. Pour éviter cette situation, MSSQL fournit une fonction d'échappement : REPLACE. La fonction REPLACE remplace les caractères réservés SQL (tels que les guillemets simples, les guillemets doubles et les barres obliques inverses) par des caractères réservés doubles afin qu'ils puissent être inclus dans les requêtes SQL dans le cadre d'une chaîne.
Prenons un exemple de cas où l'échappement ne fonctionne pas correctement :
$query = "SELECT * FROM exampleTable WHERE name = '$_POST[name]'";
Lors de l'exécution de cette requête, si la valeur saisie par l'utilisateur contient des guillemets simples, une attaque par injection SQL se produira.
La solution à cette situation consiste à utiliser la fonction REPLACE pour échapper à la chaîne avant de l'insérer dans l'instruction SQL.
$name = str_replace("'", "''", $_POST['name']); $query = "SELECT * FROM exampleTable WHERE name = '$name'";
La fonction str_replace remplace ici les guillemets simples dans l'entrée par deux guillemets simples avant de les insérer dans l'instruction SQL. De cette façon, vous pouvez éviter les attaques par injection SQL.
3. Traduction de chaînes en PHP
En PHP, vous pouvez utiliser la fonction addlashes pour échapper aux chaînes. Cette fonction échappera tous les caractères spéciaux tels que les guillemets simples, les guillemets doubles, les barres obliques inverses, etc. en caractères précédés d'une barre oblique inverse.
Par exemple :
$str = "I'm a string with 'special' characters"; $str = addslashes($str); echo $str;
Le résultat de sortie est :
I\'m a string with \'special\' characters
Dans les versions supérieures à PHP 5.4.0, la fonction addlashes a été marquée comme fonction obsolète. Utilisez plutôt mysqli_escape_string() ou la fonctionnalité de déclarations préparées de PDO. La fonction mysqli_escape_string() peut échapper aux caractères spéciaux ayant une signification dans les instructions SQL et les conserver sous forme de chaînes littérales. Lorsque ces chaînes littérales sont utilisées dans les instructions SQL, le serveur MySQL les interprètera comme des chaînes de texte brut et ne feront pas partie de la commande SQL. Cela évite les attaques par injection SQL.
Résumé
Lorsque PHP est connecté au serveur MSSQL, l'échappement de chaîne est une partie essentielle. Lorsque vous effectuez des opérations sur les chaînes, vous devez essayer d'éviter d'utiliser directement la saisie utilisateur. Si vous souhaitez utiliser la saisie utilisateur pour construire une requête SQL, vous devez utiliser la fonction REPLACE, la fonction mysqli_escape_string() ou la fonction d'instructions préparées de PDO pour effectuer un échappement de chaîne afin d'éviter les attaques par injection SQL. De plus, la définition des types String et Varchar doit également être soigneusement étudiée et doit correspondre aux règles de traitement de la longueur des chaînes en PHP pour éviter des problèmes d'échappement inattendus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!