Je cherche l'alternative de mysql_real_escape_string()
pour SQL Server. Est-ce que addslashes()
ma meilleure option ou y a-t-il une autre fonction alternative qui peut être utilisée ?
Une alternative pour mysql_error()
serait également utile.
Je cherche l'alternative de mysql_real_escape_string()
pour SQL Server. Est-ce que addslashes()
ma meilleure option ou y a-t-il une autre fonction alternative qui peut être utilisée ?
Une alternative pour mysql_error()
serait également utile.
Pour échapper aux guillemets simples et doubles, vous devez les doubler :
$value = 'This is a quote, "I said, 'Hi'"';
$value = str_replace( "'", "''", $value );
$value = str_replace( '"', '""', $value );
$query = "INSERT INTO TableName ( TextFieldName ) VALUES ( '$value' ) ";
etc...
et l'attribution : Caractère d'échappement dans Microsoft SQL Server 2000
Après avoir lutté contre ce problème pendant des heures, j'ai trouvé une solution qui est presque la meilleure.
La réponse de Chaos, qui consiste à convertir les valeurs en chaînes hexagonales, ne fonctionne pas avec tous les types de données, notamment avec les colonnes de type date.
J'utilise la fonction PDO::quote()
mais comme il est livré avec PHP, PDO::quote()
n'est pas pris en charge par MS SQL Server et renvoie FALSE
. La solution pour que cela fonctionne était de télécharger quelques paquets Microsoft :
Après cela, vous pouvez vous connecter en PHP avec PDO en utilisant un DSN comme dans l'exemple suivant :
sqlsrv:Server=192.168.0.25; Database=My_Database;
Utilisation de la UID
et PWD
dans le DSN n'a pas fonctionné, donc le nom d'utilisateur et le mot de passe sont passés comme deuxième et troisième paramètres dans le constructeur de PDO lors de la création de la connexion. Vous pouvez maintenant utiliser la fonction PDO::quote()
. Profitez-en.
Une réponse de 2009-02-22T121000 par l'utilisateur chaos ne convient pas à toutes les requêtes.
Par exemple, "CREATE LOGIN [0x6f6c6f6c6f] FROM Windows" vous donnera une exception.
PS : regardez le pilote SQL Server pour PHP, http://msdn.microsoft.com/library/cc296181%28v=sql.90%29.aspx et la fonction sqlsrv_prepare, qui peut lier des paramètres.
PSS : Ce qui ne vous a pas aidé non plus pour la question ci-dessus ;)
Avertissement : Cette fonction a été supprimée en PHP 7.0.0.
http://php.net/manual/en/function.mssql-query.php
Pour ceux qui utilisent encore ces fonctions mssql_*, gardez à l'esprit qu'elles ont été supprimées de PHP à partir de la version 7.0.0. Cela signifie que vous devrez éventuellement réécrire le code de votre modèle pour utiliser la bibliothèque PDO, sqlsrv_*, etc. Si vous cherchez quelque chose avec une méthode de "citation/escaping", je vous recommande PDO.
Les alternatives à cette fonction incluent : PDO::query(), sqlsrv_query() et odbc_exec().
Pour la conversion des valeurs hexadécimales en SQL en ASCII, voici la solution que j'ai obtenue (en utilisant la fonction de l'utilisateur chaos pour encoder en hexadécimal)
function hexEncode($data) {
if(is_numeric($data))
return $data;
$unpacked = unpack('H*hex', $data);
return '0x' . $unpacked['hex'];
}
function hexDecode($hex) {
$str = '';
for ($i=0; $i<strlen($hex); $i += 2)
$str .= chr(hexdec(substr($hex, $i, 2)));
return $str;
}
$stringHex = hexEncode('Test String');
var_dump($stringHex);
$stringAscii = hexDecode($stringHex);
var_dump($stringAscii);
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
3 votes
Pour moi, il ne s'agit pas d'une question redondante car elle concerne le cas spécifique de MSSQL qui n'a pas de PDO officiel associé.
0 votes
Fonction mysql_real_escape_string() était déprécié en PHP 5.5.0 et a été supprimé en PHP 7.0.0. .