Ruby SQLite3 bind_params

Ruby SQLite3 bind_params

提问人:Jeffrey Brown 提问时间:4/2/2015 最后编辑:Jeffrey Brown 更新时间:1/16/2017 访问量:207

问:

我在使用 Ruby SQLite 时遇到了问题。这是我的代码,

require 'socket'
require 'sqlite3'

server = TCPServer.open(1337)
DB = SQLite3::Database.new "./Tavern.db"
loop {
    Thread.start(server.accept) do |client|
        input = client.gets
        input = input.gsub '\n', ''
        input = input.split(' ')
        case input[0]
        when 'register'
            stmt = DB.prepare "INSERT INTO Managers (name, job, location, busy)
            VALUES (?, ?, ?, 0)"
            stmt.bind_params input[1], input[2], client.addr[3]
            stmt.execute
        when 'request_job'
            stmt = DB.prepare "SELECT * FROM Tasks WHERE job = ? AND assigned = 0"
            stmt.bind_params input[1]
            results = stmt.execute
            puts results.next
        end
    end
}

哪里input[1] = "test"

如果更改为 ,则 sql 查询有效,如果保持原样,则无效。我已经检查了绝对确保“test”和 input[1] 等于 ==,并在它们上使用 .bytes 并手动比较。stmt.bind_params input[1]stmt.bind_params "test"

关于为什么会这样,有什么想法吗?

红宝石 字符串 SQLite(SQL 平等

评论


答:

0赞 Austin Paxton 4/2/2015 #1

您是否也尝试过使用样式语法?stmt.bind_params( 15, "hello" )

0赞 dieter 1/16/2017 #2

我也有类似的问题。事实证明,我使用的字符串的编码与所需的编码不同。

检查什么并屈服!如果它们不同,请使用 -method。input[1].encoding"test".encodingforce_encoding