Newsgroup: it.comp.www.php
Titolo: Piccolo dubbio

Ciao ragazzi,
ho un piccolo dubbio in merito a mysql. Qualcuno/a potrà obiettare che sia
ot, ma nel caso specifico credo proprio di no trattandosi la domanda che
farò di carattere meramente di php.
Dunque, in 
www.php.net
, andando a leggere nel comando mysql_close, viene
riportato:
"mysql_close() chiude la connessione al server MySQL associata
all'identificativo di connessione specificato. Se identificativo_connessione
non è specificato, viene usata l'ultima connessione aperta. ".
Il dubbio riguarda questo "identificativo di connessione". Piu in basso
sempre nella stessa pagina c'è un esempio pratico:
<?php
   $connessione = mysql_connect("localhost", "utente_mysql",
"password_mysql")
       or die("Connessione non riuscita: " . mysql_error());
   print ("Connesso con successo");
   mysql_close($connessione);
?>
Da qui appare evidente che l'identificativo di connessione è rappresentato
da $connessione. Se vado a guardare sempre suillo stesso sito alla voce
mysql_connect, trovo:
"Restituisce un identificativo di connessione MySQL in caso di successo
oppure FALSE in caso di fallimento. "
Mi sorgono due domande... la prima.... se $connessione restituisce false in
caso di fallimento (vedi sopra) debbo dedurre che la function mysql_connect
() restituisce un valore booleano (appunto true o false).
Ma dice anche che restituisce un "identificativo di connessione" in caso di
successo, per cui devo supporre che sia ad esempio un intero.
Ora il dato restituito da mysql_connect () è un boolean o un intero? al di
la delle verifiche pratiche il problema che mi pongo adesso è un altro.
Nella funzione mysql_close () viene detto anche:
"L'uso di mysql_close() non è normalmente necessario, dal momento che le
connessioni non persistenti sono chiuse automaticamente alla fine
dell'esecuzione dello script."
Questo significa che l'identificativo di connessione (per le connessioni non
persistenti) non è necessario visto che la connessione viene chiusa subito
dopo il termine dello script, quindi si potrebbe fare anche a meno, ma a
prescindere da questo piccolo dettaglio, se ho qualcosa del tipo:
  function apri_db ( parametri ) {
      $connessione = mysql_connect ( parametri ) etc etc
    }
volendo potrei comunicare alla funzione close_db, il valore di $connessione
tramite un return in apri_db dopo aver assegnato a una variabile, niente
quindi di strano.
Ma se volessi definire un identificativo di connessione attraverso un
parametro, per esempio:
   function apri_db ($connessione, parametri ) {
      }
come dovrei aggiornare la funzione affinchè la variabile $connessione,
interna alla funzione sia quella che viene passata nel parametro?
Ringrazio a chi mi può dare qualche delucidazione in merito.
Cooper.
-- 
BlueWare Web Agency
   [web] 
http://www.blueware.it
   [icq] 146781935

 interna alla funzione sia quella che viene passata nel parametro?
Il manuale, questo sconosciuto ...
http://www.php.net/manual/en/functions.arguments.php#functions.arguments
.by-reference [ 
http://url.repository.biz/go/4j
 ]
-- 
I am what I am, I do what I can
L'uomo, conscio di sbagliare, persevera.


Perdonami, ma.... io che ho detto? Riquoto:
[mio quote]
Se vado a guardare sempre suillo stesso sito alla voce
mysql_connect, trovo:
[dal manuale]
"Restituisce un identificativo di connessione MySQL in caso di successo
oppure FALSE in caso di fallimento. "
[/dal manuale]
[/mio quote]
Il mio dubbio era di tutt'altra natura,  se io ho un tipo di dati booleano,
gli unici valori sono TRUE o FALSE.
Se io ho un tipo di dato intero (ad esempio senza segno) gli unici valori
sono i numeri interi positivi compresi chiaramente in un certo range (anche
se sufficientemente elevato).
Ora, se  $a = 1 ==> true ed    $a != 1 ==> false tutto torna, ma nell'ambito
di una istruzione condizionale
if ($a) {
  true
} else {
  false
}
e piu precisamente:
$a = mysql_connect (parametri);
if ($a) {
  // connessione avvenuta con successo
} else {
  // connessione fallita
}
se $a vale 5 come può dire che sia false????  In base a quale criterio???
Quindi $a deve essere necessariamente true o false, quindi di tipo booleano.
Se fosse di tipo intero, scrivendo:
$a = mysql_connect (parametri);
if ($a) {
  print $a;  // restituisce 1 se ha esito positivo
} else {
 print $a;   // non restituisce alcun valore o restituisce un valore nullo.
}
(potrai obiettare che quella istruzione è ridondante, essendo print $a
comune a entrambi e quindi la IF si poteva evitare, MA L'HO FATTO DI
PROPOSITO per questioni di chiarezza.... per evidenziare quando ottengo un
risultato e quando un altro....).
Ciò premesso, se ho:
$a = mysql_connect (parametri);
e l'esito della connessione è positivo $a assume il valore 1, quindi $a = 1.
Io mi chiedo... PER LOGICA, se $a = 1,  e scrivo:
mysql_connect ($a)
tutto funziona alla perfezione, se invece scrivo...
mysql_connect (1)
ottengo l'errore:
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource
in  etc etc
allo stesso modo se al posto di 1 metto TRUE.  Dunque mi trovo in una
situazione paradossale, perchè in questo caso il PRINCIPIO DI SOSTITUZIONE
PER UGUAGLIANZA riconosciuto dalla matematica qui insomma non vale piu.
E allora mi (E TI) chiedo, quanto vale $a realmente???? visto che se scrivo:
$a = mysql_connect (parametri)
print $a
mysql_close ($a)
ottengo un semplice 1, mentre se scrivo:
$a = mysql_connect (parametri)
print $a
mysql_close (1)
ottengo:
1
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource
in etc etc
Spero che mi dai una spiegazione piu esauriente e "umana" anzichè un link
che dice tutto e niente, altrimenti ti chiedo il favore personale di non
rispondermi.
Ho stima e rispetto per te, ma non ho intenzione di scendere a toni alti e
polemici.






[/mio quote]


e piu precisamente:




Ciò premesso, se ho:
$a = mysql_connect (parametri);

mysql_close ($a)
tutto funziona alla perfezione, se invece scrivo...
mysql_close (1)


 E allora mi (E TI) chiedo, quanto vale $a realmente???? visto che se scrivo:
Posso intromettermi ?
Dal manuale
resource mysql_connect ( [string server [, string nome_utente [, string 
password [, bool nuova_connessione [, int client_flags]]]]])
il valore restituito da mysql_connect non e' un intero e non e' un 
booleano, e' una variabile di tipo resource
Questo dovrebbe chiarirti tutti i dubbi
http://php.libero.it/manual/it/language.types.resource.php
ciao
Mauro

 ha scritto nel messaggio
news:cc139c$6rb$1...@newsfeed.cineca.it...

Grazie mille, questa era la risposta che cercavo :) ci sto dando una
occhiata, mi rimane da capire come la variabile $a di tipo "risorsa" sia
interpretrata dal costrutto IF () come boolean, mi sai dire qualcosa in piu
in merito?
E a che ci sono, per visualizzare il valore assunto da $a (quello vero) come
dovrei fare, nel link che mi hai dato c'è scritto:
[quoto]
For the the oblivious: An example of a resource would be a mysql database
connection.
$result = mysql_connect("localhost", "username", "pass");
//$result variable is a resource.
print $result;
//will print: Resource ID#1, or something similar
[/quoto]
ma se provo a fare come scritto sopra, mi restituisce un errore. hai qualche
suggerimento da darmi.
Grazie ancora :)
Cooper.


 Perdonami, ma.... io che ho detto? Riquoto:
http://www.php.net/manual/en/language.types.resource.php
http://www.php.net/manual/en/language.operators.comparison.php
Guarda gli operatori !== o ===


 qualcosa in piu in merito?
if ($a === false) {
	// error
} else {
	mysql_select_db('foo', $a); // etc


 dovrei fare, nel link che mi hai dato c'è scritto:
Ma a che cosa ti serve il valore di $a, non ha un "valore" e' una 
risorsa o non lo e' ... comunque a me se faccio
echo $a
da' effettivamente Resource ID#1 (se non ricordo male, adesso non riesco 
a provare)
ciao
Mauro

 
-- 
--
www.iuz-lab.info

Tu sai che in php non c'è bisogno di dichiarare che tipo di variabile 
restituirà il metodo, perciò da qui capisci che se riesce ad effettuare 
la query valorizzerà la variabile, altrimenti la valorizzerà a false.
In realtà anche se una variabile ritorna 0 il controllo if lo 
interpreterà come false.
Ci sono vari modi per manipolare una resource; ad esempio puoi usare 
mysql_fetch_array($a); e ti inserirà il risultato della query in un array.
Per vederlo basta che inserisci questo codice:
$resource = mysql_fetch_array($a);
echo "<pre>";
print_r($resource);
echo "</pre>";
Cooper wrote:
[CUT]



Per scopi meramente didattici, sto infatti scrivendo una "dispensa" e per
poterlo fare correttamente preferisco togliermi in anticipo ogni dubbio e/o
ambiguità che mi può venire in mente prima di scrivere cazzate, tutto qui :)
