Ruby 在插入XDB时,字符串末尾的反斜杠会导致错误

Ruby 在插入XDB时,字符串末尾的反斜杠会导致错误,ruby,escaping,influxdb,Ruby,Escaping,Influxdb,我有一个字符串: string = "\\" puts string # => \ 我将其插入一个新字符串并发送到数据库。但是,数据库(XDB)使用反斜杠作为转义字符,因此按下此字符串可能会导致错误 例如,如果我将以下内容传递到inflow,它将导致“unterminated string”错误: 为什么这样不行?为什么gsub(“\\”,“\\”)起作用?有更好的办法吗 已解决 正如我在一篇评论中提到的,实际上我并不是在字符串中手动插入INSERT。我正在使用XDB ruby: IN

我有一个字符串:

string = "\\"
puts string
# => \
我将其插入一个新字符串并发送到数据库。但是,数据库(XDB)使用反斜杠作为转义字符,因此按下此字符串可能会导致错误

例如,如果我将以下内容传递到inflow,它将导致“unterminated string”错误:

为什么这样不行?为什么
gsub(“\\”,“\\”)
起作用?有更好的办法吗


已解决

正如我在一篇评论中提到的,实际上我并不是在字符串中手动插入INSERT。我正在使用XDB ruby:

INFLUXDB_CLIENT.write_point("things", time: Time.now.to_i, values: { foo: "\\" })
事实证明这是宝石的一个缺陷:


它在V0.4.2中是固定的,我使用的是0.4.1,您只需使用参数化查询字符串:

INSERT INTO my_db.default.my_measurement,my_tag=1 my_val=%{1}
当您调用它时,您可以执行以下操作:

influxdb.query("...query...", params: [ string ])

您所做的是通过将未经扫描的数据发送到查询中来创建一个经典。同样的原则也适用于任何具有纯文本字符串表示的数据库,甚至是HTML和JavaScript等其他数据格式。

我使用的可能重复的数据格式,我假设它已清除了所有内容,但我猜不是。我已经通知了他们的Github并等待响应。只有使用参数化查询功能,他们才能进行清理。他们没有别的办法知道你把什么放在你的绳子上。避免注射错误的方法是首先不注射。我想我的问题有点误导。实际上,我正在做的是调用
INFLUXDB\u客户端。write\u point(“things”,time:time.now.to\u I,value:{foo:“\\”})
。因此,我并不是真的对自己进行插值,它是由gem完成的。插入片段有点相切,我的意思是更多地关注
gsub
代码,该代码由标记为重复的答案处理。但是我接受了你的,因为它更适合我的情况。我想这是一个X/Y问题。结果我没有找到错误,但它是一个错误。请看,我使用的是0.4.1版,错误在0.4.2中修复
INSERT INTO my_db.default.my_measurement,my_tag=1 my_val=%{1}
influxdb.query("...query...", params: [ string ])