From: Christopher Dicely Date: 2009-03-15T02:23:36+09:00 Subject: Re: Cannot fetch from database using if...else On Sat, Mar 14, 2009 at 6:29 AM, Arun Kumar wrote: > Hi, > I'm new to ruby and right now i'm trying out some examples involving > database access using the dbi module. This is my code... > > #!/usr/local/bin/ruby -w > > require 'dbi' > > begin > con = DBI.connect("DBI:Mysql:Sample:localhost", "arunkumar", "123456") > stats = con.prepare("Select * from hello where first_name = ?") > stats.execute('arun') > if stats.fetch == nil >    puts "No Records" >    con.rollback > else >    puts stats.fetch > end > rescue DBI::DatabaseError => e >    puts "Error: #{e.errstr}" > ensure >    con.disconnect if con > end > > If I use 'puts stats.fetch' before if the fetched data is displayed > properly. But if i use 'puts stats.fetch' inside if or else 'nil' will > be displayed even if there are matching records in the database. I dont > know why. Can anybody help me????? Since stats.fetch is a method call, and you want to output the same result you are testing, not call the method again and output whatever it would return the second time if it is not nil the first time, you probably want to replace the if...else...end structure with something like this: if (result = stats.fetch) == nil puts "No Records" con.rollback else puts result end Since "nil" is the only result that is false in a boolean context that fetch will return, you don't really need a comparison to nil: if (result = stats.fetch) puts "No Records" con.rollback else puts result end