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

时间:2012-08-03 13:16:22

标签: php sql-server escaping quotes

我正在构建我的查询:

$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函数中,我尝试通过替换'with 2 quotes'来阻止这种情况。 我回显查询字符串:

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);

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

现在我被卡住了 - 我应该改变什么才能获得包含单引号的字符串?

1 个答案:

答案 0 :(得分:1)

这个问题似乎与缺少本地mssql_real_escape_string()函数有关,该函数已解决by this thread

你应该更担心SQL注入攻击,这是我们很多人最终放弃的问题,因为他们更喜欢使用PDO,正如评论中所提到的那样。

这种类型的“为下一个数据接收者做好准备”是FIEO口头禅(过滤器输入转义输出)的一部分。