2010-01-27 14 views
7

Mi chiedo quale sia l'equivalente in PHP per l'escape delle stringhe di SQL Server?alternativa mysql_real_escape_string per SQL Server

+3

Se si utilizza un wrapper come PDO, non ci si deve preoccupare di questo perché è possibile lavorare con query parametrizzate. Se puoi, usa un involucro. –

+0

Spiacente, non ho il privilegio di usare PDO. –

risposta

7

Bella domanda, non lo so ma è possibile utilizzare PDO::quote() con il driver PDO_DBLIB.


EDIT: Sembra this guygot it from StackOverflow:

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

Un'altra opzione:

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

Funziona con PHP7? Perché l'hanno rimosso. – YumYumYum

3

La migliore alternativa è quella di utilizzare le query parametrizzate, allora non devono sfuggire alle stringhe.

Se si desidera mettere insieme la query da soli, il metodo corretto per evitare una stringa letterale per SQL Server (T-SQL) è sostituire ogni apostrofo (') nella stringa con due apostrofi.

+0

Gestisce anche caratteri null, backslash e simili nella stringa? –

+0

@ebyrob: Sì. A proposito, i backslash in una stringa non hanno bisogno di alcun trattamento speciale. – Guffa

+0

È valido per tutti i set di caratteri? –

0

La risposta breve è: utilizzare il meccanismo fornito dalle librerie di connessione, in realtà non ha nulla a che fare con il database. Se stai usando ADO, hai delle query parametrizzate, se stai usando qualcos'altro (non so nulla di PHP), quindi usa tutto ciò che offre la libreria.

Rotolare il proprio è probabilmente una cattiva idea, perché è molto probabile che tu abbia qualcosa che non va, ad es. gestire correttamente i delimitatori di commento.

Problemi correlati