2012-10-03 72 views
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字符串值。誰能幫我這個?

謝謝!

回答

1

當它位於字符串文字中時,大多數驅動程序不會將?識別爲佔位符。爲了解決這個問題,你有幾個選擇。首先,你可以做字符串工作紅寶石:

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想要用於其字符串文字的嵌入式單引號。

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