可以转义字符串中的双连字符吗?

时间:2015-07-23 12:22:08

标签: mysql delphi

我有一个delphi应用程序,它将MySQL查询发送到我们的服务器。以下查询失败

INSERT INTO `KPT`.`Internalorders` 
  (`InternalOrderId`, `UserId`, `Text`, `MailSent`, 
   `Done`, `PartlyDone`, `Ordered`) 
VALUES (0, NULL, '- Teststring -- Teststring -', NULL, 1, 1, 1)

出现此错误消息:

  

MySQL错误代码:(1064)   您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在#39;' - Teststring'附近使用正确的语法。在第1行

看起来字符串在我用于数据库访问(MySQLDAC)和表单的第三方组件内部进行wordwrapped

'- Teststring 
-- Teststring -'

这将导致将第二部分视为评论。因为我没有可能改变第三方工具,我希望这是一种逃避双连字符的方法。

有吗?

1 个答案:

答案 0 :(得分:4)

您可以使用参数解决此问题,它将带来几个巨大的优势:

  • 字符串和引号没有问题(如您所知)
  • SQL injection的弹性。
  • 可重复使用&快速更新查询(只需更改参数值并再次执行)
  • 查询更易于阅读和维护。

所以你的查询变为:

INSERT INTO `KPT`.`Internalorders` 
  (`InternalOrderId`, `UserId`, `Text`, `MailSent`, 
   `Done`, `PartlyDone`, `Ordered`) 
VALUES (0, NULL, :Text, NULL, 1, 1, 1)

通过Params对象分配Text参数或在查询对象上使用ParamByName方法并执行它。