SQLite SELECT与正则表达式捕获字符串一起使用时不在Ruby中工作,但与字符串文字一起工作

SQLite SELECT与正则表达式捕获字符串一起使用时不在Ruby中工作,但与字符串文字一起工作,ruby,sqlite,irc,Ruby,Sqlite,Irc,我正在使用以下正则表达式捕获以匹配IRC部分消息: :(?<nick>[a-zA-Z\d<\-\[\]\\^{}_]+)!(.+)@(.+) PART (?<chan>[#&][^\x07\x2C\s]{0,200}) :(.+) >> :mark!~mark@Mark-Szymanskis-MacBook.local PART #testing :mark mark has parted. 第一个放入并输出正确的字符串。但是第二个put没有

我正在使用以下正则表达式捕获以匹配IRC部分消息:

:(?<nick>[a-zA-Z\d<\-\[\]\\^{}_]+)!(.+)@(.+) PART (?<chan>[#&][^\x07\x2C\s]{0,200}) :(.+)
>> :mark!~mark@Mark-Szymanskis-MacBook.local PART #testing :mark
mark has parted.
第一个
放入
并输出正确的字符串。但是第二个
put
没有输出任何内容。我知道尼克的抓捕案在桌子上。每当我使用文字字符串而不是
m[:nick]
时,它都可以正常工作。我正在使用Gem来操作数据库

以下是收到部分消息时的完整输出:

:(?<nick>[a-zA-Z\d<\-\[\]\\^{}_]+)!(.+)@(.+) PART (?<chan>[#&][^\x07\x2C\s]{0,200}) :(.+)
>> :mark!~mark@Mark-Szymanskis-MacBook.local PART #testing :mark
mark has parted.

某些数据库库(如ActiveRecord)允许使用“?”作为占位符来防止SQL注入。我不确定您使用的是什么数据库库,但它可能不支持这种类型的字符串插值。即使是这样,它可能仍然需要用单引号括住“?”。

某些数据库库(如ActiveRecord)允许使用“?”作为占位符来防止SQL注入。我不确定您使用的是什么数据库库,但它可能不支持这种类型的字符串插值。即使是这样,它可能仍然需要用单引号括住“?”。

我决定使用字符串插值而不是占位符

 db.execute("SELECT * FROM users WHERE nick = '#{SQLite3::Database.quote m[:nick]}'")

我决定用字符串插值代替占位符

 db.execute("SELECT * FROM users WHERE nick = '#{SQLite3::Database.quote m[:nick]}'")

尝试删除该记录而不是选择它,如果该记录被删除,则检查数据库。@user482594这也不起作用。我认为使用#query会起作用,但仍然不起作用。谁对此投了反对票,请解释自己?尝试删除该记录而不是选择它,如果记录被删除,请检查数据库。@user482594这也不起作用。我原以为使用#query会起作用,但它仍然不起作用。谁对这一点投了反对票,请解释一下他们自己?围绕着这个问题?单引号中给出了一个错误:
/Users/mark/.rvm/gems/ruby-1.9.2-p180/gems/sqlite3-1.3.3/lib/sqlite3/statement.rb:41:in'bind_param':绑定或列索引超出范围(sqlite3::RangeException)
。另外,我在问题中提到我正在使用
sqlite-3
ruby库。另外,我很确定情况并非如此,因为用文本字符串替换
m[:nick]
非常有效。您可以尝试通过“#to_s”方法将结果对象显式转换为字符串。它可以是MatchData:m[:nick].to_s类,或者是“#{m[:nick]}”类,当使用
#{m[:nick]}
将字符串直接放入查询时,它可以工作。但是我不希望为了防止SQL注入而必须这样做?单引号中给出了一个错误:
/Users/mark/.rvm/gems/ruby-1.9.2-p180/gems/sqlite3-1.3.3/lib/sqlite3/statement.rb:41:in'bind_param':绑定或列索引超出范围(sqlite3::RangeException)
。另外,我在问题中提到我正在使用
sqlite-3
ruby库。另外,我很确定情况并非如此,因为用文本字符串替换
m[:nick]
非常有效。您可以尝试通过“#to_s”方法将结果对象显式转换为字符串。它可以是MatchData:m[:nick].to_s类,或者是“#{m[:nick]}”类,当使用
#{m[:nick]}
将字符串直接放入查询时,它可以工作。但我不希望为了防止SQL注入而必须这样做。