Christopher Dicely
3/14/2009 5:24:00 PM
On Sat, Mar 14, 2009 at 6:29 AM, Arun Kumar
<arunkumar@innovaturelabs.com> 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 =3D DBI.connect("DBI:Mysql:Sample:localhost", "arunkumar", "123456")
> stats =3D con.prepare("Select * from hello where first_name =3D ?")
> stats.execute('arun')
> if stats.fetch =3D=3D nil
> =C2=A0 =C2=A0puts "No Records"
> =C2=A0 =C2=A0con.rollback
> else
> =C2=A0 =C2=A0puts stats.fetch
> end
> rescue DBI::DatabaseError =3D> e
> =C2=A0 =C2=A0puts "Error: #{e.errstr}"
> ensure
> =C2=A0 =C2=A0con.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 =3D stats.fetch) =3D=3D 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 =3D stats.fetch)
puts "No Records"
con.rollback
else
puts result
end