Php到MsSql查询-转义引号(';)问题


Php to MsSql query - escape quotes (') issue

我正在构建我的查询:

$q = sprintf("UPDATE testTable SET Text='%s', [Read]=0, TimeUpdated='%s', [From]='%s' WHERE ID='%s'", ms_escape_string($text), $dateReceived, $from, $convID);  

我执行它:

$res = mssql_query($q, $dbhandle);

$text应该是自由文本,这样它就可以包含各种奇怪的字符(现在让我们坚持使用ASCII)。最简单的情况是$text包含报价,例如$text = "Mc'Donalds"

在ms_escape_string函数中,我试图通过用2个引号替换"来防止这种情况。我回显查询字符串:

UPDATE testTable SET Text='Mc''Donalds', [Read]=0, TimeUpdated='2012-08-03 12:44:49', [From]='bogus' WHERE ID='14'

(注意:在同一个数据库上从VS服务器资源管理器执行此查询效果良好)

一切似乎都很好——参见Mc’Donalds的双引号——但在执行时仍然失败:[mssql_query(): message: Incorrect syntax near 'Mc'

我认为SET QUOTED_IDENTIFIER可能是罪魁祸首,所以我尝试了

 $q = "SET QUOTED_IDENTIFIER OFF";
 $resq = mssql_query($q,$dbhandle);

在执行我的查询之前,但没有雪茄——我仍然会得到同样的错误。

现在我陷入了困境——我应该更改什么才能让包含单引号的字符串通过?

这个问题似乎更多地与缺少本机mssql_real_eescape_string()函数有关,该函数由该线程解决。

您应该更担心SQL注入攻击,正如评论中提到的那样,我们中的许多人最终都因为更喜欢使用PDO而解决了这个问题。

这种类型的"为下一个数据接收者做好准备的转义"构成了FIEO咒语(Filter Input Escape Output)的一部分。