2010-01-27 19 views
7

¿Me pregunto cuál es el equivalente en PHP para el escape de cadenas de SQL Server?mysql_real_escape_string alternativa para SQL Server

+3

Si utiliza un contenedor como PDO, no tendrá que preocuparse porque puede trabajar con consultas parametrizadas. Si puedes, usa un contenedor. –

+0

Lo sentimos, no tenemos el privilegio de usar PDO. –

Respuesta

7

Buena pregunta, no sé pero podría usar PDO::quote() con el controlador PDO_DBLIB.


EDIT: Parece quethis guygot it from StackOverflow:

function mssql_escape($data) { 
    if(is_numeric($data)) 
     return $data; 
    $unpacked = unpack('H*hex', $data); 
    return '0x' . $unpacked['hex']; 
} 

Otra opción:

function mssql_escape($str) 
{ 
    if(get_magic_quotes_gpc()) 
    { 
     $str= stripslashes($str); 
    } 
    return str_replace("'", "''", $str); 
} 
+0

¿Funciona con PHP7? Porque lo eliminaron. – YumYumYum

3

La mejor alternativa es utilizar consultas parametrizadas, entonces no lo hace tiene que escapar de las cadenas.

Si aún desea realizar la consulta usted mismo, la forma correcta de escapar un literal de cadena para SQL Server (T-SQL) es reemplazar cada apóstrofo (') en la cadena con dos apóstrofes.

+0

¿Eso también maneja caracteres nulos, barras diagonales inversas y similares en la cadena? –

+0

@ebyrob: Sí. Las barras diagonales inversas en una cuerda no necesitan ningún tratamiento especial, por cierto. – Guffa

+0

¿Es esto válido para todos los juegos de caracteres? –

0

La respuesta corta es: utilice cualquier mecanismo que proporcionen sus bibliotecas de conexión, realmente no tiene nada que ver con la base de datos. Si está utilizando ADO, tiene consultas parametrizadas, si está utilizando otra cosa (no sé nada de PHP) y luego usa lo que ofrece la biblioteca.

Rodar por su cuenta es probablemente una mala idea, porque es muy probable que tenga algún error, p. manejando los delimitadores de comentarios correctamente.

Cuestiones relacionadas