J'ai une requête
$sql ="SELECT CustomerID FROM tblCustomer WHERE EmailAddress = '".addslashes($_POST['username']) ."' AND Password = '".addslashes($_POST['password']) ."'"; // while printing, it will be SELECT CustomerID FROM tblCustomer WHERE EmailAddress = 'test@ab\'c.com' AND Password = '123'
4 Réponses :
pour Utilisez http://php.net/manual/fr/function.mysql-real-escape-string.php p> J'aime: p> pour MSSQL strong> p> regarder sur les réponses ici: p> Comment échapper aux chaînes dans SQL Server à l'aide de PHP? P> < / p> mysql_real_escape_string code> p>
Cela fonctionne uniquement pour MySQL, NO MS SQL Server. L'affiche semble vouloir également vouloir une solution dans MS SQL Server.
Si nous le faisons comme ça, la requête produira comme Select * de TblCustomer où e-mailAddress = '' et mot de passe = '' // Les valeurs de formulaire ne sont pas émettant de mysql_real_escape_string
J'aimerais pouvoir bownveler cette réponse à nouveau. Votre fonction MS_Escape_string est le genre de choses que je suis fiere sur pas b> que les données doivent être validées par l'appelant et, si elles sont valides, devraient le faire à la DB non modifiée b> .
Son exemple je lie à la question initiale.
@haim Evgi: Et j'ai également révélé la source de votre exemple aussi. Aucune fonction de cite ne doit manquer les données - tout son objectif dans la vie est de voir que les données le font dans la DB non affectée par la syntaxe de devis de la base de données.
addSlashes () code> va échapper Citations simples avec une barre oblique inverse qui est une syntaxe valide dans MySQL mais pas dans MS SQL Server. La bonne façon d'échapper à une seule citation dans MS SQL Server est une autre citation unique. Utilisez mysql_real_escapape_string () code> A> Pour MySQL ( mysql_escapape_string () code> a été obsolète). Malheureusement, aucun MSSQL _ code> existe de manière à ce que vous deviez rouler votre propre utilisation avec str_replace () code> , Preg_replace () Code> ou quelque chose de similaire. Mieux encore, utilisez une couche d'abstraction neutre de base de données telle que PDO prenant en charge les requêtes paramétrées. P>
J'avais +1 vous, sauf que vous avez lié à la même fonction «citant» semi-constituée que je viens de descendre deux fois.
@chao: Je n'ai pas regardé avec précaution à cette fonction avant de le lier. Je n'ai pas remarqué que c'était des données de mangling. Merci de pointer cela à moi. J'ai supprimé le lien vers la fonction offensive de ma réponse.
PHP 7 Mise à jour: Cette extension a été obsolète dans PHP 5.5.0, et elle a été supprimée dans PHP 7.0.0. Au lieu de cela, l'extension MySQLI ou PDO_MYSQL doit être utilisée. Les alternatives à cette fonction incluent: mysqli_real_escape_string (), PDO :: citation ()
Pour MySQL, vous souhaitez utiliser pour SQL Server, c'est un peu plus compliqué, comme (1) MySQL cite des trucs sans standard, et (2) je ne vois pas une fonction faite pour citer des trucs pour SQL Server. Cependant, les éléments suivants doivent fonctionner pour vous ... P> mysql_real_escape_string code>. addslashes code> fait presque la même chose et comporte moins de lettres, mais apparemment, cela me trompe mal - ne l'utilisez pas. $escaped_str = str_replace("'", "''", $unsafe_str);
AddSlashes () Code> a été conçu pour un but différent et obtient un cas subtil. Ne l'utilisez pas pour vous échapper pour MySQL.
@staticsan: J'ai un peu pensé qu'il y avait une raison pour une autre fonction (avec une version précédente obsolète!) Pour citer les chaînes MySQL. +1 pour le mentionner. :) édité ma réponse en conséquence.
Vous ne devriez pas vraiment construire la déclaration SQL de manière dynamique car elle est dangereuse (et inutile). La bonne chose à faire est d'utiliser une requête paraméralisée voir http://msdn.microsoft.com/en-us/library/cc296201%28SQL.90%29.aspx
$sql ="SELECT CustomerID FROM tblCustomer WHERE EmailAddress = ? COLLATE SQL_Latin1_General_CP1_CIAI AND Password = ? COLLATE SQL_Latin1_General_CP1_CSAS";
Pourriez-vous être clair si vous voulez savoir comment cela se fait dans MySQL ou SQL Server? On dirait que tu veux vraiment ce dernier si tes tags disent le contraire.
Je souhaite le travailler dans SQL Server
Dupliqué possible de Comment échapper aux chaînes dans SQL Server à l'aide de PHP? < / a>
AddSlashes n'a jamais été en sécurité et a donc été retiré de PHP. Vous devez trouver un didacticiel ou une autre source d'informations PHP de moins de 15 ans.