MySQL查询检查没有返回任何内容

时间:2015-10-10 21:25:35

标签: mysql ruby

我的代码是:

#!/usr/bin/ruby
require 'mysql'

@mycon = Mysql.new 'localhost', 'user', '', 'test'

time_check = @mycon.query("SELECT v_status FROM test.movement WHERE test.movement.id = '1001'")
time_check.each_hash do |test_result|
  test_report = test_result['v_status']

  if test_report.empty?
    @test_says = "UNKNOWN"
  else
    @test_says = test_report
  end
end

puts @test_says

查询'1001'没有返回任何内容,因为它不在数据库中,但由于某种原因,if test_report.empty?无法正常工作。我也试过了nil?但是没有用。如果数据库中没有记录,我需要将@test_says更新为“未知”。

如果我查询数据库中确实存在的内容,那么我会得到预期的结果。

在IRB中,寻找不在数据库中的东西,我回来了:

=> #<Mysql::Result:0x00000000f482b0>

否则我在数据库中得到预期的结果。

任何人都可以帮助我获得UNKNOWN的预期结果,而不会对数据库造成任何打击吗?

更新 在@K M Rakibul Islam的帮助下,我转而使用mysql2 gem和以下代码:

#!/usr/bin/ruby
require 'mysql2'

@mycon = @mycon = Mysql2::Client.new(:host => "localhost", :username => "user", :database => "test")

time_check = @mycon.query("SELECT v_status FROM test.movement WHERE test.movement.id = '1001'")
  if time_check.count == 0
  @test_says = "UNKNOWN"
  else
time_check.each do |test_result|
  test_report = test_result['v_status']
    @test_says = test_report
  end
end

puts @test_says

根据需要返回UNKNOWN。我必须如上所示移动.count部分因为我的var test_report只是一个字符串而不是mysql2 :: result。

2 个答案:

答案 0 :(得分:0)

如果您使用mysql2 gem,则可以使用count方法:

if test_report.count == 0
  @test_says = "UNKNOWN"
else
  @test_says = test_report
end

您必须确保在count对象上致电Mysql2::Result

答案 1 :(得分:0)

使用mysql2 gem,您可以使用each代替each_hash

这应该有效,并且在没有结果时永远不应该调用块:

time_check.each do |test_result|
  test_report = test_result['v_status']
  ...
end