2016-10-26 4 views
0

Я использую this вопрос в качестве ссылки. Моя проблема в том, что он кодирует мою строку шестнадцатеричным, но не расшифровывает ее после ее записи в базу данных.SQL Server Escape String

HTML TextArea

<textarea class="form-control" rows="5" name="nomInfo[]" id="appNom" placeholder="Additional Information"></textarea> 

Получение значения POST и вставки в БД

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

$nomInfo = $_POST['nomInfo'][0]; 

$nomInfoDecode = mssql_escape($nomInfo); 

$query = "INSERT INTO dbo.emp_recog (nomInfo) VALUES ("; 
$query .= "'" . $nomInfoDecode . "');"; 

Так, например, если типы I в ggfdgdfg/fdg.fdgdf.gdf "fdskfdskfds;fsd ' sdfds' fds/f% в текстовое поле и представить форму, это написано в база данных 0x67676664676466672f6664672e66646764662e676466205c226664736b6664736b6664733b667364205c272073646664735c27206664732f6625

+0

Это кажется излишним, когда подготовленное заявление позволит избежать необходимости эвакуации строк. EDIT: но чтобы ответить на ваш вопрос, удалите апострофы во второй строке вашего запроса $ query. – ZLK

+0

, например. '$ query. =" '". $ nomInfoDecode. "');"; '->' $ query. = $ nomInfoDecode. ");", поскольку апострофы заставляют вас буквально помещать '0x676766646764666726666672e66646764662e676466205c226664736b6664736b6664733b667364205c272073646664735c27206664732f6625' в отличие от того, что представляет это шестнадцатеричное значение. – ZLK

+0

Это имеет смысл и выглядит корректно, но по какой-то причине он все еще записывает шестнадцатеричную строку в базу данных, выполняя именно то, что вы сказали. @ZLK – collint25

ответ

0

Я уверен, что пример не цитирует значение, которое нужно вставить:

mssql_query(' 
    INSERT INTO sometable (somecolumn) 
    VALUES (' . mssql_escape($somevalue) . ') 
'); 

, которые переведены на ваш запрос, используя двойные кавычки будет:

$query = "INSERT INTO dbo.emp_recog (nomInfo) VALUES ("; 
$query .= $nomInfoDecode . ");"; 

Можете ли вы дать, что выстрел?

+0

Кстати, я бы предпочел использовать двойные кавычки следующим образом: $ query = "INSERT INTO dbo.emp_recog (nomInfo) VALUES ($ nomInfoDecode)"; – WEBjuju

+0

Это имеет смысл и выглядит правильно, но по какой-то причине он все еще записывает шестнадцатеричную строку в базу данных, выполняя именно то, что вы сказали. @WEBjuju – collint25

0

Сбросьте все предметы гексагона, в этом нет необходимости. На самом деле единственное, что нужно беспокоиться о побеге, - это цитата '. MySQL использует косую черту \ как символ escape. MS SQL использует цитату ', чтобы избежать цитат ', так что вы просто дважды вверх котировок:

return str_replace("'", "''", $data);