提问人:Jeffrey Brown 提问时间:4/2/2015 最后编辑:Jeffrey Brown 更新时间:1/16/2017 访问量:207
Ruby SQLite3 bind_params
Ruby SQLite3 bind_params
问:
我在使用 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"
关于为什么会这样,有什么想法吗?
答:
0赞
Austin Paxton
4/2/2015
#1
您是否也尝试过使用样式语法?stmt.bind_params( 15, "hello" )
0赞
dieter
1/16/2017
#2
我也有类似的问题。事实证明,我使用的字符串的编码与所需的编码不同。
检查什么并屈服!如果它们不同,请使用 -method。input[1].encoding
"test".encoding
force_encoding
评论