Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将DBI::DatabaseHandle对象作为参数传递给ruby gem方法_Ruby_Gem_Arguments_Dbi - Fatal编程技术网

无法将DBI::DatabaseHandle对象作为参数传递给ruby gem方法

无法将DBI::DatabaseHandle对象作为参数传递给ruby gem方法,ruby,gem,arguments,dbi,Ruby,Gem,Arguments,Dbi,我是ruby的新手,所以如果这是一个愚蠢的问题,请提前原谅我。我在谷歌上搜索了答案,但没有找到相关的答案,似乎答案应该是显而易见的 我试图将DBI::DatabaseHandle作为函数参数传递,但在运行函数时,参数数目错误。这是我的密码 require 'rubygems' require 'dbi' class CmsTest def self.get_dbi_connection(hostname, user, password) connection = DB

我是ruby的新手,所以如果这是一个愚蠢的问题,请提前原谅我。我在谷歌上搜索了答案,但没有找到相关的答案,似乎答案应该是显而易见的

我试图将DBI::DatabaseHandle作为函数参数传递,但在运行函数时,参数数目错误。这是我的密码

require 'rubygems'
require 'dbi'

class CmsTest

    def self.get_dbi_connection(hostname, user, password)
        connection = DBI.connect("DBI:OCI8:" + hostname, user, password)
        return connection
    end

    def self.query(connection, sql)
        puts connection
        puts sql
        begin
            request = connection.prepare("#{query}")
            request.execute
            fetched = []
            request.fetch do |row|
                fetched << row.to_h 
            end 
            request.finish
            return fetched
        rescue DBI::DatabaseError => e
            log "An error occurred"
            log "Error code:    #{e.err}"
            log "Error message: #{e.errstr}"
        ensure
        end
    end
end
即使查询签名包含两个参数,并且我正在向方法传递两个参数,也会发生这种情况。对我来说,真正奇怪的是,如果我在puts之后在方法体中的任何位置放置和退出语句,它将显示该方法确实收到了2个参数

#<DBI::DatabaseHandle:0x007fa2a316c9f0>
select licensor_id, licensor_name from cf_licensor
我搞不懂这个。请提供帮助。

您有一个名为query的方法:

然后在查询中尝试调用查询:

您可能希望在那里使用sql,而不需要字符串插值:

request = connection.prepare(sql)

你能添加完整的堆栈跟踪吗?
#<DBI::DatabaseHandle:0x007fa2a316c9f0>
select licensor_id, licensor_name from cf_licensor
def self.query(connection, sql)
request = connection.prepare("#{query}")
# -- method call ---------------^^^^^
request = connection.prepare(sql)