Newsgroup: it.comp.lang.perl
Titolo: aiuto !! Assegnari campi db a variabili

Ciao, ho appena cominciato a fare qualche programmino in perl ora mi è sorto
un problema che non riesco a risolvere:
Mi connetto a un db MYSQL, faccio una select e l'assegno ad una variabile
ora come posso fare a riferirmi ad un campo specifico della select e poterlo
ad esempio assegnare ad una variabile o stamparlo ? Vi invio un estratto del
programmino in cui vorrei usare i campi della tabella "TABELLA":
#!/usr/bin/perl -w
use DBI;
my $dbh = DBI->connect("DBI:mysql:Prepagato:localhost:pippo:pluto") or
die("Error in SQL\n");
my $exp_time2 = time()-86400;
my $sth = $dbh->prepare('SELECT * from TABELLA');
$sth->execute();
$sth->finish;
$dbh->disconnect;
exit;
Saluti e Grazie.

 $sth->execute();
Uhm. meglio un:
my $rows=$sth->execute();
quindi:
if ($rows) {
  my ($campo1, $campo2, ...) = $sth->fetchrow_array();
eventualmente in un ciclo for, se pensi che produca piu` di un risultato
e ti servono:
if ($rows) {
  for($i=0;$i<$rows;$i++) {
    my ($campo1, $campo2, ...) = $sth->fetchrow_array();
Ovviamente $campo1, $campo2 ecc, devono "matchare" con i "campi" che ti
tornano dalla select, e di solito gli dai nomi "omologhi" (per
comodita`).
cmq, tutte queste cosine, in perldoc DBI ci dovrebbero essere.
-- 
                         Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Debian GNU/Linux: because size DOES matter.

     my ($campo1, $campo2, ...) = $sth->fetchrow_array();
Non e` da considerare una buona pratica affidarsi al valore restituito
da execute() per sapere il numero di record risultanti da una select.
Per recuperare le righe una ad una, il metodo che trovo piu` comodo e`
usare fetchrow_hashref(), che restituisce un riferimento ad una hash
le cui chiavi sono i nomi del campi, e i campi i valori memorizzate
nei rispettivi campi. Ad esempio:
   # ... dopo la connessione al db e l'execute() ...
   while( my $row = $sth->fetchrow_hashref() ) {
     # ora si possono scrivere cose come $row->{ nome_del_campo }
     # per recuperare i valori
   }
+++
Sulle tecniche d'uso del modulo DBI e` stato pubblicato un paio di
giorni fa un nodo molto utile su Perlmonks. Se l'inglese non e` un
problema, invito Massimo a dargli un'occhiata. Sicuramente trovera`
qualche idea utile.
 
http://www.perlmonks.org/index.pl?node_id=284436
ciao,
S.

Grazie mille per l'aiuto intanto soltanto mi da un errore che non riesco a
capire
Ho fatto in questo modo:
my $sth = $dbh->prepare('SELECT Codice from TABELLA');
my $rows=$sth->execute();
if ($rows) {
  my ($Codice) = $sth->fetchrow_array();
}
print $Codice;
e mi da il seguente errore:
Name "main::Codice" used only once: possible typo at 
cerca.pl
 line 13.
Use of uninitialized value in print at 
cerca.pl
 line 13.
La riga 13 è quella del print
Ciao

 print $Codice;
Qui stampi $Codice, ma il lexical di prima e` gia` morto e sepolto.
E quindi scatta l'errore (non scatterebbe se non usassi strict, ma
non e` il modo giusto per fare sparire gli errori; consiglio di
tenere acceso strict mentre studi il linguaggio). Una maniera per
risolvere e`:
   my $Codice;
   if ( $rows ) {
     my ($Codice) = $sth->fetchrow_array();
   }
   print $Codice;
ciao,
S.

Grazie mille per l'aiuto.
Adesso funziona.
Ciao

    print $Codice;
Oppure:
if ($rows) {
  my ($Codice)=$sth->fetchrow_array();
  print $Codice;
}
-- 
                         Maurizio - Tannoiser - Lemmo
                 Founder Member of ERLUG 
http://erlug.linux.it
-------------------------------------------------------------------------------
Take a jump. A million lemmings can't all be wrong.

	Qualcuno sa dirmi se PERL::Tk permette di trattare con
	la descrizione dei canvas con PostScript ? Non vorrei essere
	mal inteso, non mi serve per stampare su carta, ma allo
	stesso modo in cui in Tcl/Tk è possibile tracciare curve
	a schermo.
	Inoltre: che relazione c'è tra Tcl/Tk e Perl::Tk, hanno
	qualcosa a che vedere o è solo un caso di omonimia ?
	Consigliereste il manuale ``PERL - guida di riferimento'' 
	della O'Reilly ?
	Grazie per l'attenzione,
	Paolo Lulli	
-- 
                                           _         ______ |                  
  \    The Hacking Pages        \        /   \___-=O`/|O`/__|                  
   \   	     ---                 \_______\          / | /    )                 
   /     
www.lulli.net
           /        `/-==__ _/__|/__=-|               
  /                             /         *             \ | |                  
                                                        (o)                    

	qualcosa a che vedere o è solo un caso di omonimia ?
Mi pare il genere di domande a cui può efficacemente rispondere la
documentazione del modulo.
In particolare, l'esistenza, in tale documentazione, di un riferimento al
metodo:
    $canvas->postscript(?option, value, option, value, ...?)
mi fa sospettare che si possa rispondere positivamente alla prima domanda,
pur non avendo io mai usato tale modulo.
Ciao.