mysql - ruby MySQL 返回#<Mysql :0x000000016f3780> and not nil

标签 mysql ruby return null

环境是:

ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-linux]
gem: mysql (2.9.1)

我正在尝试使用 ruby​​ 从 MySQL 中提取数据。它看起来像这样(在 http://www.kitebird.com/articles/ruby-mysql.html 找到)

def read_sql_host(hostname, mac)
hostname = "'" + "#{hostname}" + "'"
mac = "'" + "#{mac}" + "'"
res = dbh.query("SELECT macadd FROM basenode WHERE hostname = #{hostname}")

res.each do |row|
    row = row.collect { |v| v.nil? ? "nil" : v }
    return row[0]
end
dbh.close if dbh
end

现在 - 当我添加:

puts read_sql_host("node13.abit.dk", "00-11-22-33-44-55")

它返回正确的东西:

[koen@Cerberus cgi-bin]$ ruby use_sql.rb 
50:e5:49:b0:50:1a

但是当我请求某些内容时,数据库中没有该内容:

puts read_sql_host("node66.abit.dk", "00-11-22-33-44-55")

它只是返回一些我不知道的东西,如何更改?

[koen@Cerberus cgi-bin]$ ruby use_sql.rb 
#<Mysql:0x000000022f4818>

根据我的理解,它应该返回“nil”,如每个循环中所述?

任何帮助将不胜感激:>

//M00kaw

最佳答案

循环遍历该行:

res.each do |row|
    row = row.collect { |v| v.nil? ? "nil" : v }
    return row[0]
end

但是,当没有行时,.each 将不会执行,并且不会到达返回值。您将看到下一条语句:

dbh.close if dbh

它返回dbh.close返回的内容。

顺便说一句:您的代码看起来像 PHP。我会使用像 Sequel 这样的数据库抽象层,这会让你的事情变得更容易。 Please take a look at the example here,这应该能让你信服:)

关于mysql - ruby MySQL 返回#<Mysql :0x000000016f3780> and not nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16762645/

相关文章:

python - Django + MySQL + Ubuntu = 错误

javascript - 想要多次 `return`

MySQL 如何使用主选择值作为子查询参数?

PHP循环遍历数组以从数据库中获取每个键的值(第三范式)

Erlang 中的 Ruby

ruby-on-rails - 移动 Heroku 共享数据库

android - 如何在 calabash-android 中将应用程序带到前台?

python - return True/False 实际上做了什么? (Python)

java - 如何使用 BorderLayout 将 JPanel 返回到 JFrame 的中心?

php - 原始查询 - 更新多列 - 不适用于 Idiorm