accessing values in hash
mattdope
created: 2006-09-03 17:55:02
Hi there, was hoping someone could help. I have fetched two columns (username and password) from a database using
$hash_ref = $sth->fetchrow_hashref)
I am now looking to access each column seperately to search for values. When I use:
if($username eq $hash_ref->{username})
to access this column I keep getting errors. Could anyone suggest what I might be doing wrong?
Re: accessing values in hash
created: 2006-09-03 18:11:09

Your first error is that you don't tell us the error message.

You might want to inspect the data structure you get back:

use Data::Dumper;

print Dumper $hash_ref;

In general, it helps very much to give a small, self-contained piece of code that reproduces the error. Even much better if that piece of code needs no external infrastructure like a database or whatnot.

Re^2: accessing values in hash
created: 2006-09-03 19:23:18
ok, i now have:
#fetch two colums (username , password)
while($hash_ref = $sth->fetchrow_hashref){

#dereference
my %values=%$hash_ref;

#print out usernames
print $values{'username'};}
I can print out all the usernames from the database but do you know how I can match one of these usernames to
$testUsername
I need to print off something like "username matched"
Re^3: accessing values in hash
created: 2006-09-03 19:37:08

OK..let me get this straight. You're querying a database to get all usernames so you can use Perl to see if a given username is present?

If that's the case -- and this isn't a rather odd homework assignment -- make the database do the work and write the query to see if the username is present. This way Perl would get a true/false answer from the database, and you wouldn't have to check 8,000,000 usernames

In Perl, one way to do it would be to load all the usernames into an array and use grep

$yes = grep { /$username/ } @usernames;

emc

Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.

Albert Einstein
Re: accessing values in hash
created: 2006-09-03 19:23:26

You didn't provide enough information for anyone to give you any meaningful assistance.

Obviously, check to see if everything is defined and the database request didn't return an error (such as "item not found").

emc

Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.

Albert Einstein
Re^2: accessing values in hash
created: 2006-09-03 19:33:33
hi there, there is no problem accessing the database. I am using;
$sth = $dbh->prepare("select username, password from reg");

$sth->execute;
and then the previous code I have posted to fetch and display it. But I need to print out whether the username i have it $testUsername matches one of the usernames returned from the database
Re^3: accessing values in hash
created: 2006-09-03 19:40:04

Sorry, I posted before you posted your answer.

emc

Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.

Albert Einstein
Re^4: accessing values in hash
created: 2006-09-03 20:16:48
sorry I have never came across grep. You mean I should be looking to do something like:

$sth = $dbh->prepare(q{select username, password from reg 

where username = ?});

$sth->execute($testUsername);

Re^5: accessing values in hash
created: 2006-09-03 23:16:37

[doc://grep] applies a test to all the elements of a list and creates a subset of the elements that pass the test. Using it in scalar context return the number of elements which passed the test.

However, if you know the username first, I would suggest making the database do the work and re-writing the query to something like this (note that my SQL skills are quite rusty):

$sth = $dbh -> prepare(q{select username, password from reg where username = $testUsername});

Why return a list to Perl and check the entire list for the existence of username when the database can do exactly that? If you're testing a large number of user names, it may make more sense to query the database for a list, and then check the list for the for existence of all the user names(subject to the caution that the database may have been updated during the processing of the list).

emc

Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.

Albert Einstein
Re^6: accessing values in hash
created: 2006-09-05 06:11:23
But of course using placeholders :)

----------
"Write a wise saying and your name will live forever." - Anonymous

Re^7: accessing values in hash
created: 2006-09-05 11:01:39

Now that I know about them, of course.

emc

Only two things are infinite, the universe and human stupidity, and I'm not sure about the former.

Albert Einstein

perlmonks.org content © perlmonks.org and Corion, mattdope, Nevtlathiel, swampyankee

prlmnks.org © 2006 edmund von der burg (eccles & toad)

v 0.03