Phoenix.pm: Addition to MySQL DBD

Doug Miles doug.miles at bpxinternet.com
Mon Oct 9 15:45:11 CDT 2000


Cool.  You should send the maintainer a patch. :)

Webmaster wrote:
> 
> Well, it's a slow Columbus day, so I'd thought I'd share this little bit of
> MySQL code.
> 
> DBI POD describes a method called 'selectcol_array' which the MySQL DBD does
> not support as it supposedly should.
> 
> The 'selectcol_array' method is a very useful one, as you can get an array
> of column values from a select statement in one fell swoop.
> 
> It's a good example of adding a little piece of your own code to an already
> existing class.
> 
> Here is the code:
> 
> package DBI::db;  # This is the class that a MySQL database handle belongs
> to (which calls this method)
> 
>  # The method name that is supposed to be there according to DBI docs, but
> isn't (that I know of)
> sub selectcol_array {
>         # Use an existing DBI::db method.
>         #  NOTE: @_ automatically is sent to sub if you leave off '()'.
>         # i.e. &selectall_arrayref() would not work.
>     my $arrayref = &selectall_arrayref;
>     my @return = ($arrayref)?(map { $$_[0] } @$arrayref):();  # The expected
> return is a list... unless...
>         # The behavior of selectrow_array is to send the first item in the
> list if called in a scalar context.
>         # So, lets make selectcol_array behave the same, Even though in
> scalar context, the two now do the same thing.
>         # ed. that makes very efficient calls to selectrow_array if you only
> want one value,
>         #         i.e. my $email = $DBH->selectrow_array("select email from
> users where uid=3");
>     return (wantarray)?@return:$return[0]
> }
> 
> # SYNOPSIS
> 
> package main;
> 
> $DBH = DBI->connect('DBI:mysql:azwebs', 'azwebs', 'acompletelybogupassword')
> || die "unable to connect";
> 
> # to get a list of email addresses that have a certain preference selected
> from a prefs column...
> 
> for ($DBH->selectcol_array( "select email from users where
> find_in_set('send_updates', prefs)"))  {
>         ICM::Utilities->email_update_message( $_ );
> }
> 
> Any questions on this?  Couple of neat MySQL things here...
> 
> Happy Columbus Day (That 'eeeevil' European!)
> 
> Tim

-- 
- Doug

Don't anthropomorphize computers. They hate that.



More information about the Phoenix-pm mailing list