【问题标题】:Ruby SQLite3 bind_paramsRuby SQLite3 绑定参数
【发布时间】:2015-06-06 17:38:38
【问题描述】:

我遇到了 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"

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

关于为什么会出现这种情况的任何想法?

【问题讨论】:

    标签: ruby string sqlite equality


    【解决方案1】:

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

    检查input[1].encoding"test".encoding 的产量!如果它们不同,请使用force_encoding-方法。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-26
        • 1970-01-01
        • 2017-08-02
        • 2016-01-01
        • 1970-01-01
        相关资源
        最近更新 更多