2010-01-27 6 views
7

Интересно, что эквивалентно в PHP для SQL Server экранирование строк?mysql_real_escape_string альтернатива для SQL Server

+3

Если вы используете обертку типа PDO, вам не придется беспокоиться об этом, потому что вы можете работать с параметризованными запросами. Если можно, используйте обертку. –

+0

Извините, у вас нет prielege для использования PDO. –

ответ

7

Хороший вопрос, я не знаю, но вы можете использовать PDO::quote() с водителем PDO_DBLIB.


EDIT: Похоже this guygot it from StackOverflow:

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

Другой вариант:

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

Работает ли он с PHP7? Потому что они удалили его. – YumYumYum

3

Наилучшей альтернативой является использование параметризованные запросы, то вы не должны избегать строк.

Если вы все же хотите, чтобы запрос был скомпонован, правильный способ избежать строкового литерала для SQL Server (T-SQL) заключается в замене каждого апострофа (') в строке двумя апострофами.

+0

Это также обрабатывает нулевые символы, обратную косую черту и т. П. В строке? – 2012-06-06 15:03:59

+0

@ebyrob: Да. Между прочим, косые черты в струне вообще не нуждаются в специальной обработке. – Guffa

+0

Действительно ли это для всех наборов символов? –

0

Короткий ответ: использовать любой механизм, предоставляемый библиотеками соединений, он не имеет ничего общего с базой данных. Если вы используете ADO, у вас есть параметризованные запросы, если вы используете что-то другое (я ничего не знаю о PHP), то используйте то, что предлагает эта библиотека.

Роллинг, вероятно, плохая идея, потому что вы, скорее всего, получите что-то неправильно, например. правильно обрабатывать разделители комментариев.

Смежные вопросы