我正在尝试使用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字符串值。任何人都可以帮我这个吗?
谢谢!
答案 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