I am looking to get input from terminal like, What is the value to match in columnA? cat <enter> What is the value to match in columnB? dog <enter>
To address problem (1), consider some UI code like below. There of course many variants on how to do this. I present one framework that might be useful:
I have some issues with problem (2) the DBI code. Let us know if problem (1) is solved.#!/usr/bin/perl use strict; use warnings; my @answers = get_user_answers ("First Name", "Last Name"); print "User Said: @answers\n"; @answers = get_user_answers ("Animal1", "Animal2"); print "User Said: @answers\n"; # # get array of answers to an array # of prompts. Any non-blank answer, that # is also a single space separated token is allowed # sub get_user_answers { my (@prompts) = @_; my @answers; foreach my $prompt (@prompts) { my $answer = prompt4answer($prompt); push (@answers, $answer); } return @answers; } # # get a non_blank, single token answer # for a single prompt # sub prompt4answer { my $prompt = shift; my $answer; while ( (print "$prompt: "), $answer = <STDIN>, $answer !~ /^\s*\S+\s*$/) { if ($answer =~ /^\s*\S+\s+\S+/) { print "Error! Only a single word allowed!\n"; } # note: Simply re-prompts (no Error!) on a blank line } # Normal UI convention is to ignore leading and # trailing white spaces $answer =~ s/^\s*//; # trim leading spaces $answer =~ s/\s*$//; # trim trailing spaces # also deletes line endings (\n) return $answer; } __END__ Example session: C:\Projects_Perl\testing>perl UI_multi_prompt.pl First Name: First Name: clark kent Error! Only a single word allowed! First Name: clark Last Name: kent User Said: clark kent Animal1: dog cat Error! Only a single word allowed! Animal1: Animal1: dog Animal2: cat User Said: dog cat
Addition:
I would recommend in the connect statement that you use the RaiseError option. If you do this, that eliminates a lot of "or die" clauses. Connect looks similar to this:
This SQL is fine:my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","",{RaiseError = +> 1}) or die "Couldn't connect to database: " . DBI->errstr;
However, in your program, I would use named SQL columns instead of '*' in the
SQL statement.
Your code references columns 1,2,3,5 (skips 0 and 4)
Just delete column 0 and 4 in the SELECT by using SQL named fields instead
of using '*'.
Instead of using $sth->fetchrow_array(), consider using $sth->fetchall_arrayref() for "small" result sets, 10K or 100K rows.
Instead of:#code could look like this (untested): my $aref = $sth->fetchall_arrayref(); foreach my($cptanswer, $insid, $preauth, $updated)(@$aref) { print "\t$cptanswer\t$insid\t$preauth\t$updated\n"; }
while (@data = $sth->fetchrow_array()) { my $cptanswer = $data[1]; my $insid = $data[2]; my $preauth = $data[3]; my $updated = $data[5]; print "\t$cptanswer\t$insid\t$preauth\t$updated\n"; }
In reply to Re: select from mysql table based on two column match
by Marshall
in thread select from mysql table based on two column match
by abner
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |