0

我正在尝试使用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)

我面临的问题是“?” 它应该包含 Varname 字符串值。谁能帮我这个?

谢谢!

4

2 回答 2

3

当 a 在字符串文字中时,大多数驱动程序不会将其识别?为占位符。为了解决这个问题,您有几个选择。首先,您可以在 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(...)代替。

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

于 2012-10-04T02:22:32.323 回答
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
于 2012-10-04T19:31:48.333 回答