Newsgroup: it.comp.www.php
Titolo: replicare il comportamento di un recordset ado (da asp-access-iis-win2k a php-mysql-apache-linux)

come ho detto in alcuni messaggi precedenti sto arrivando a php da
asp.  uno una serie di applicazioni funzionanti asp-access-iis-win2k e
le devo portare verso lamp (linux apache mysql php).
si tratta di applicazioni molto semplici: fate conto di avere
un'anagrafica del personale tutta in una tabella e a seconda del
reparto scelto si devono elencare le persone che ne fanno parte.
delle banali select ... where, dritte per dritte.
premetto che io continuo a sviluppare su una macchina windows, però
poi sta roba dovrà andare sul server lamp.
il problema principale che sto incontrando, per il momento, è questo:
è possibile replicare il comportamento di un recordset ado
nell'interrogazione di un db mysql per mezzo di php?
vedo che posso usare delle cosiddette funzioni di supporto com.
queste però funzionano solo su windows, quindi non funzionerebbero una
volta utilizzate sulla macchina di produzione linux.
vedo che il metodo classico è quello di caricare il risultato di una
query in un array, e poi scorrere l'array stesso.  poi se non sbaglio
indicizzandolo per parola chiave ossia nome del campo è possibile
richiamare il valore del campo stesso per quella riga-record.  dico
bene?  ci sono magari altri metodi più simili ai recordset?
un'ultima cosa.
io penso che a chi scrive documentazioni e faq vada fatto un
monumento.  stesso dicasi a chi cerca di fare opera didattica.  sono
anche convintissimo assertore del discorso di insegnare a pescare
anziché dare il pesce, e, per quanto mi è concesso dalle mie modeste
conoscenze, cerco anche io di fare opera didattica cercando di
stimolare la voglia di apprendere rispetto al copiaincolla.  sono
anche io molto infastidito da quelli che a volte chiedono "qual è *lo*
script per...", come se ci fosse un programma già bello pronto per
ogni esigenza e chi lo sa lo vuol tenere nascosto al niubi di turno.
tutto ciò premesso, devo dire però che, cercando accuratamente
risposta ai vari problemi che ho incontrato nell'avvicinarmi ad un
linguaggio nuovo per mezzo dei vari 
groups.google.com
, 
verynews.com
ecc., ho notato a volte alcuni atteggiamenti un po' deludenti.
prendo un esempio a caso, forse esagerato ma emblematico.  un tizio
(chiamiamolo A) aveva chiesto se in php esistesse qualcosa di simile
ai recordset disconnessi di asp.  ora, i r.d. non è che siano una
mezza cazzata generica tipo "esiste il ciclo for in php?": sono
qualcosa che ha delle particolari peculiarità.
gli è stato risposto testualmente da un altro tizio che chiameremo B:
"usa le funzioni giuste", punto.  usa le funzioni giuste, né più né
meno.
A cerca di chiedere qualche dettaglio più specifico.  B gli risponde
con i link a tutta la documentazione delle funzioni mysql_qualcosa.
un copiaincolla, senza neanche cercare di capire la domanda di A, che
ripeto, non era banale.
ora, dopo questa lunga introduzione, quello che volevo dire è che a
copiare link siamo tutti dei gran geni, vero?  è facile dire ad un
tizio: "la documentazione è lì, leggila", solo perché non si capisce o
non si ha voglia/tempo di capire e rispondere alla sua domanda, o di
mettersi nei suoi panni.  chi ha risposto con la sbrodolata di link,
se l'è letta tutta quella documentazione?  davvero?  e se la ricorda?
io penso che sarebbe stato carino segnalare sì la documentazione e
dire "la parte che ti interessa la trovi più o meno lì e nel nostro
gergo si chiama così e cosà".  non credo proprio che uno che sa cos'è
un rst disconnesso non sia in grado di usare google o cercare su
php.com
 o altrove: è più probabile che non abbia trovato ciò che cerca
(come io non ho trovato, per il momento almeno, gran ché di utile per
risolvere i miei problemi).
io penso che il "vero genio" si sa mettere nei panni di chi domanda e
gli sappia tracciare un percorso didattico organico, che magari può
anche consistere nel ricordargli che senza documentarsi un po' non si
va da nessuna parte.  di qui a dire leggiti la documentazione dritto
per dritto, senza neanche sforzarsi di capire che vuole il tizio però
ce ne passa.
forse anche la mia è una faq, o una domanda banale.  come scorrere il
risultato di una query...  leggiti la documentazione, no?  peccato che
di documentazione ce ne sia fin troppa, che sia scritta in modo,
diciamo eufemisticamente, per addetti ai lavori, che gli esempi che
porta siano a volte abbastanza limitati e che ci siano molti modi di
fare la stessa cosa che però non sono del tutto equivalenti, che
diversi copiaincolla di esempi che ho fatto danno errori
incomprensibili, e io devo solo scorrere sta tabella filtrata con un
where, cazzarola, e ancora non ci riesco.
allora, chi è veramente esperto (o tale si ritiene perché magari nella
vita non fa altro che programmare in php, o anche perché è proprio
nato più intelligente e perseverante della media - a volte capita)
deve anche capire che per un novizio la sovrabbondanza di
documentazione (molta della quale, ripeto, scritta per addetti ai
lavori) è altrettanto disorientante dell'assenza della stessa: occorre
prenderne atto e guidare meglio chi ha bisogno di aiuto, occorre
capire cosa ha in testa, scomporglielo e ricomporglielo, se si vuole
fare messaggi utili.
se invece si vuol far vedere che uno ce l'ha più lungo e l'altro è più
cretino, bah, ci si tenga queste meschine soddisfazioni.
ovviamente come in tutti i ng ci sono tante e tante domande ben
spiegate in faq e simili, quello di cui sopra il comportamento
generale su questo ng, e di situazioni del genere ce ne sono in tutti
i ng.  qui però, scusate se lo dice uno appena arrivato, mi è sembrato
leggermente superiore alla media.

generale su questo ng, e di situazioni del genere ce ne sono in tutti
volevo dire: quello sopra *non* è il comportamento generale ecc..

 connessione al database (MySQL) in generale?
Usare le funzioni giuste.
_____________________
Questo è quanto... ho ripreso solo quella domanda.. quotare in fondo serve a
capire a cosa si sta rispondendo, no?
Di sicuro non so cosa siano i record disconnessi (per ora), per cui non ho
risposto a quello.
Mi cospargo il capo di cenere per la frettolosità della risposta.
Mi auguro tuttavia che i miei sforzi per contribuire al newsgroup siano
apprezzati: partecipo solo per aiutare gli altri (sono stati rari post
iniziati da me), e cerco sempre di rispondere... Cmq farò più attenzione
alle mie risposte =)
Ludovico

 richiamare il valore del campo stesso per quella riga-record.
non è questo il metodo classico...
il recordset o resultset o risultato della query è restituito in un 
buffer ( statico o dinamico, con molte varianti, ma diventa una guerra 
spiegarle), l'estrazione di un singolo record avviene in una struttura 
associativa attraverso una specifica funzione php.
La struttura associativa adottata è un array con indici che hanno lo 
stesso valore dei nomi dei campi per poter ottenere il "field value" .
Queste cose sono scritte nei manuali, chiedere di riassumere il manuale 
è spesso una pratica adottata da chi non vuole "perdere tempo" a capire 
le cose e si accontenta della pappa pronta e fa girare assai le scatole 
a chi invece crede che sia costruttivo confrontarsi sui problemi, non 
fare le traduzioni o i riassunti dei manuali!
Ci sono due semplici regole per ottenere risposte soddisfacenti:
1) scrivere domande chiare e comprensibili, possibilmente non quesiti 
universali (Da dove veniamo, dove andiamo?)
2) se è difficile spiegarsi (perché manca la conoscenza o l'argomento è 
particolarmente complesso) fare un esempio chiaro e più possibile 
commentato.
Come avrete avuto modo di notare spesso e volentieri si cerca anche di 
correggere errori di sintassi o "di logica" analizzando il codice 
postato... la buona volontà c'è da parte di molti, vediamo di non farla 
finire nel cesso in breve tempo.
Ciao Gianfranzo
-- 
ICQ#: 21258924 Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra
"dopo tutto, gli angeli non sono altro che dei volatili" D. Pennac

lbo ha scritto:
[megacut]
troppo lungo, non lo leggerò mai
-- 
Chinaski FDB
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

fare le traduzioni o i riassunti dei manuali!
ascolta bello, adesso hai davvero scassato i maroni.  ok, hai fatto la
tua bella figura, bravo, clap clap, sei un vero duro e ho tanta paura
di te.  adesso però torna buonino.
modestamente è qualche annetto che giro sui ng, non sarò certo un
campione ma credo più o meno di aver capito come convenga comportarsi
e credo anche di aver imparato a riconoscere chi fa polemiche fini a
sé stesse, come in questo caso stai facendo tu.
credo sia meglio che io e te ci si ignori a vicenda.
saluti.
--
Se una nazione si aspetta di essere ignorante e libera, 
essa immagina quello che mai è stato e mai sarà. 
Il popolo non può essere sicuro senza informazione. 
Quando la stampa è libera, e ogni uomo è in grado 
di leggere, tutto è sicuro.
(Thomas Jefferson)

troppo lungo, non lo leggerò mai
sticazzi, tra un centinaio d'anni il mondo dovrà fare a meno di te, io
comincerò da subito.


 semplice e rapida da codificare.
Lungi da me l'idea di dirti RTFM, comunque all'indirizzo
http://it.php.net/manual/it/
troverai molte piu' risorse di quanto non credi.
Ad esempio, ho cercato "mysql" ed e' uscita una pagina con questo esempio:
###################################
<?php
     /* Connessione e selezione del database */
     $connessione = mysql_connect("host_mysql", "utente_mysql", 
password_mysql")
         or die("Connessione non riuscita");
     print "Connesso con successo";
     mysql_select_db("mio_database") or die("Selezione del database non 
riuscita");
     /* Esecuzione di una query SQL */
     $query = "SELECT * FROM mia_tabella";
     $risultato = mysql_query($query) or die("Query fallita");
     /* Stampa dei risultati in HTML */
     print "<table>\n";
     while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
         print "\t<tr>\n";
         foreach ($linea as $valore_colonna) {
             print "\t\t<td>$valore_colonna</td>\n";
         }
         print "\t</tr>\n";
     }
     print "</table>\n";
     /* Liberazione delle risorse del risultato */
     mysql_free_result($risultato);
     /* Chiusura della connessione */
     mysql_close($connessione);
?>
###################################
che, tolti i commenti e il codice HTML non ha molte piu' righe del 
codice che hai postato tu.
Inoltre ci trovi tutte le funzioni relative al database mysql.
NB: anche se la pagina e' in italiano, ci potrebbero essere delle 
traduzioni non proprio complete, ma questo non credo proprio sia un 
problema per te. Inoltre in fondo ad ogni pagina ci sono i contributi 
degli utenti con suggerimenti e/o trucchi per utilizzare le funzioni 
ricercate, ed a volte ci sono delle autentiche perle :-)
-- 
ciao            |visita
                 |
http://www.sifor.it
gelty           |
http://www.sifor.com
-------------------------------------
E' esplicitamente vietato usare l'indirizzo e-mail di questo messaggio
per fini diversi dalla risposta al messaggio stesso (Art. 10 DL. 171/98).

 credo sia meglio che io e te ci si ignori a vicenda.
già!...
lascia stare Jefferson e compera un libro di php, anzi compera un libro 
di informatica prima, meglio compra un libro :(


     while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
[...]
gelty, ti ringrazio, ma questo è proprio il "metodo classico" (cioè
riversare la query in un array che come indice usa il nome dei campi)
che appunto ho incontrato in tutte le faq e documentazioni e al quale
chiedevo eventuali alternative.
è chiaro che concettualmente e come risultato è la stessa cosa che
scorrere un rst asp, io mi domandavo però se ci fossero metodi
alternativi.


 chiedevo eventuali alternative.
Beh, nella stessa pagina, tra i contributi degli utenti, forse c'e' 
qualcosa che fa per te.
Prova a darci un'occhiata.


 sticazzi, tra un centinaio d'anni 
avrò imparato a fare una semplice query in php



Qualcosa del genere potrebbe andare?
$result = mysql_query("select * from tabella where .....);
while(list($a, $b, $c) = mysql_fetch_row($result) {
    fai quel che vuoi
}
Se pensi che prima o poi possa servirti phpnuke (o se hai tempo), fatti un
giro dalle parti di Cla e studia il codice, si scoprono tante soluzioni
interessanti (niente OO perň, a parte forse un timido tentativo nelle
ulltime versioni).
Paolo

 }
Dimenticavo, ovviamente devi fare attenzione alle variabili che usi nel
list, ovvero se hai usato la wildcard nella query devi usare le variabili
che corrispondono a ciascun campo della tabella, altrimenti se fai una
select su campi specifici, puoi usare solo le variabili che si riferiscono a
quei campi. L'ordine ovviamente è quello usato nella select o quello dei
campi se usi la wildcard.
Paolo

 > while(list($a, $b, $c) = mysql_fetch_row($result) {
^^^^
while(list($a, $b, $c) = mysql_fetch_row($result)) {

Prova a darci un'occhiata.
grazie del consiglio di guardare *se* da qualche parte c'è qualcosa
che mi interessa.
magari io pensavo che qualcuno aveva voluto risolvere un problema
simile e avesse *già* trovato quel qualcosa e me lo volesse dire.
ok, no problem, se la tassa da pagare per imparare è quella di dover
perdere tempo cercando info specifiche più o meno a casaccio,
reimmegiamoci pure in faq e documentazioni.


>Uff....
no problem, grazie... :-)


 che mi interessa.
Non intendevo questo.
Nella pagina suggerita ci sono esempi su come non utilizzare gli array.
Ti suggerivo solo di controllare se vanno bene a te.
