There does not seem to be anything about that covers exactly what I want to do, so here goes:
The scenario is this: I have several stored procedures which take little input and give little output. Typically they take a parameter as either a number or string, and expect either a number or string back.
my $var_with_chars = "a string"; my @result = []; $sql = 'call register_hit("'.$var_with_chars.'",@hit_count)'; +#watch out for the "@"! my $sth = $db_handle->prepare($sql); $sth->execute() || die $DBI::errstr; $sth->finish; # Now get the output variable @result = $db_handle->selectrow_array('SELECT @hit_count');# | +| die $DBI::errstr; print "result=", $result[0], "\n";
The above code assumes that you are using Perl DBI and DBD::Mysql and have created a valid database handle, $db_handle.
You will note the @hit_count is a made up variable, only used with the database connection and does not need to be declared locally. All other variables are local. You will also note the way I have had to construct the $sql statement. This is so that when passed to DBD::Mysql the contents of the variable are passed not the variable name. If you try to reverse the style of the quotes then perl tries to pass something for @hit_counter, if it is not defined you will get an error saying so, and if it is it will be evaluated as an array reference causing DBD::Mysql to crash.
I hope that helps.
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |