Reading MySQL rows


#1

Hi there,

I´m having difficulties reading the content of some rows in my database.
Tried to use some of the code at page 221 in the pickaxe, but didn´t
make it work.

The SQL query works fine directly against the database.
mysql> select id, count, company from users where name = “martin”;
±—±------±-----------+
| id | count | company |
±—±------±-----------+
| 1 | 0 | |
±—±------±-----------+

def count(number)
puts "count() reached!\n user is #{@username} " # this works

userdata = User.find_by_sql("select id, count, company from users
where name = ‘@username’ ")
account = userdata[0]
puts “account-id: #{@account.id}” # empty
puts “the name of the company is: #{@account.company}, count #
{@account.count}\n” # empty

end

How do I collect the content of the id, count and company field to
variables?

I´m very grateful for all help I can get!


Best regards,
Martin S._______________________________________________
Rails mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.org/mailman/listinfo/rails


#2

Martin S. wrote:

end
Your last two puts lines reference @account, but the line before assigns
to account. @account will be nil unless assigned already in the current
object.

Also, the SQL sent to the database will currently contain the literal
string “@username” as the name rather than the contents of @username.
The best way to pass parameters to the database is with one of the
following two techniques:

userdata = User.find_by_sql([“select id, count, company from users where
name = ?”, @username])

userdata = User.find_by_sql([“select id, count, company from users where
name = :name”, {:name => @username})


Philip R.
http://tzinfo.rubyforge.org/ – DST-aware timezone library for Ruby


#3

Hi,

On Apr 11, 2006, at 7:14 PM, Philip R. wrote:

end
userdata = User.find_by_sql([“select id, count, company from users
where name = ?”, @username])

userdata = User.find_by_sql([“select id, count, company from users
where name = :name”, {:name => @username})

Thanks!

I tried with this:

userdata = User.find_by_sql(["select id, sendt, company from

users where name = ?", @username])

@account = userdata[0]
puts “id is: #{@account.id}, sendt: #{@account.sendt}}”

How should I write it to make puts print the right id and sent values?

Thanks again!


Regards,
Martin S.


#4

Hi,

On Apr 11, 2006, at 8:57 PM, Martin S. wrote:

{@account.count}\n" # empty

userdata = User.find_by_sql([“select id, sendt, company from
users where name = ?”, @username])

@account = userdata[0]
puts “id is: #{@account.id}, sendt: #{@account.sendt}}”

How should I write it to make puts print the right id and sent values?

I forgot to mention the most important detail, @account.id and
@account.sendt is still empty. :slight_smile:

Sorry for not getting it right in the first email!

Regards,
Martin


#5

Martin S. wrote:

I forgot to mention the most important detail, @account.id and
@account.sendt is still empty. :slight_smile:

I’m not sure what the problem is here. There’s an extra close brace at
the end of your puts line, but this shouldn’t be causing any problem.

Perhaps you could try putting the following line in after running the
query to see what is returned:

puts userdata.inspect


Philip R.
http://tzinfo.rubyforge.org/ – DST-aware timezone library for Ruby


#6

On Tuesday, April 11, 2006, at 6:33 PM, Martin S. wrote:

±—±------±-----------+
account = userdata[0]
I�m very grateful for all help I can get!


Best regards,
Martin S._______________________________________________
Rails mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.org/mailman/listinfo/rails

You should be able to do something like this:

userdata = User.find_by_name(:first, @username)

The “by_name” compares @username with your “name” column. All columns
are returned. Then you examine columns like: “userdata.company”.

I think your orginal query will work if you change it slightly.

userdata = User.find_by_sql(“select id, count, company from users
where name = ‘#{@username}’”.