Ruby:用Like编写语句

时间:2012-10-03 23:04:12

标签: ruby prepared-statement

我正在尝试使用like关键字创建预备声明:

这是sql语句:

select user, 
       name_xml 
  from employee
 where name_xml like '<name>Varname</name>'

Varname是一个动态变量。它可以包含任何字符串值。例如:Varname = 'John Smith'

代码:

sql_name = @dbh.prepare(sql)

sql = 'select user, name_xml from employee
where name_xml  like '<name>?</name>''

sql_name.execute (Varname)

我面临的问题是&#34;?&#34;它应该包含Varname字符串值。任何人都可以帮我这个吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

大多数驱动程序在字符串文字内时都不会将?识别为占位符。为了解决这个问题,你有几个选择。首先,你可以在Ruby中完成字符串工作:

sql = 'select user, name_xml from employee where name_xml like ?'
#...
sql_name.execute("<name>#{Varname}</name>")

或者您可以在SQL中粘贴各个部分:

sql = %q{select user, name_xml from employee where name_xml like '<name>' || ? || '</name>'}
#...
sql_name.execute(Varname)

||应该在大多数数据库中连接字符串,但有些字符串需要+concat(...)

注意在第二个中切换到%q{...}以引用,其作用类似于单引号(Ruby)字符串,但您不必担心转义SQL要用于其的嵌入式单引号字符串文字。

答案 1 :(得分:0)

感谢您的回复!这应该工作。我尝试了以下内容,它也完美无缺:

sql = 'select user, name_xml from employee
where name_xml  like ('#{test}')'


Varname = "John Smith" 
  test = "%<name>"+Varname+"</name>%"

 sql_name= @dbh.prepare(sql)

  sql_name.execute()

  sql_name.fetch do |row|
    sql_name =  row[0]
  end