SQL Server转义字符串

时间:2016-10-26 22:51:20

标签: php html sql-server

我使用this个问题作为参考。我的问题是它将我的字符串编码为十六进制,但一旦将其写入数据库就不对其进行解码。

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 . "');";

例如,如果我在ggfdgdfg/fdg.fdgdf.gdf "fdskfdskfds;fsd ' sdfds' fds/f%中键入textarea并提交表单,则会将其写入数据库0x67676664676466672f6664672e66646764662e676466205c226664736b6664736b6664733b667364205c272073646664735c27206664732f6625

2 个答案:

答案 0 :(得分:0)

我非常确定该示例没有引用要插入的值:

mssql_query('
  INSERT INTO sometable (somecolumn)
  VALUES (' . mssql_escape($somevalue) . ')
');
使用双引号翻译成您的查询的

将是:

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

你可以试一试吗?

答案 1 :(得分:0)

废弃所有十六​​进制的东西,没有必要。真的唯一担心逃避的是引用'。 MySQL使用斜杠\作为转义字符。 MS SQL使用引用'来转义引用',因此您只需将引号加倍:

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