我使用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
答案 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 );