giorno settimanamesegiorno

Sono passati 356 giorni dall'inizio dell'anno che corrispondono a 51 settimane

Saremo tutti onesti saremo tutti buoni dicono i manifesti in tempo di elezioni



* Chattina

Aggiorna Storia
  • mar: :resistere:
    Febbraio 15, 2022, 19:44:48
  • mar: Non mi ricordavo di essere un global moderator wauuuu Ok Prof ti lascio restaurare in pace!
    Febbraio 15, 2022, 19:43:56
  • mar: :Cartelli70:
    Febbraio 15, 2022, 19:41:14
  • mar: ad cazzum pure qui?
    Febbraio 15, 2022, 19:41:02
  • mar: ciaoooo sono in perlistrazione
    Febbraio 15, 2022, 19:40:44
  • mar: :okkey:
    Febbraio 15, 2022, 19:40:20
  • Loretta/Nina: ciao a tutti
    Ottobre 04, 2021, 19:23:02
  • Loretta/Nina: :tuffarsi:
    Settembre 21, 2021, 07:08:03
  • Loretta/Nina: Buon autunno a tutti
    Settembre 21, 2021, 07:01:35
  • nuvolotta: avventure testuali
    Luglio 06, 2020, 23:26:08
  • _jan_: ...gli ultimo però....!!
    Gennaio 14, 2019, 14:45:09
  • _jan_: vedi gli ultimi post in fondo.
    Novembre 24, 2018, 19:10:00
  • mar: Trovato :Amm9:
    Novembre 24, 2018, 18:57:51
  • mar: Chi cerca trova non vi trovo! :Cartelli2:
    Novembre 24, 2018, 18:57:05
  • mar: Vado a vedere le cartoline!
    Novembre 24, 2018, 18:52:38
  • mar: :Amore145:
    Novembre 24, 2018, 18:52:21
  • mar: :Amore178:
    Novembre 24, 2018, 18:52:07
  • _jan_: Welcome Visitor.  :Party133:
    Novembre 15, 2018, 10:03:24
  • Loretta/Nina: Benvenuto ligi  :Cartelli37:
    Ottobre 09, 2018, 13:19:25
  • nuvolotta: Cucù...  :Amore20:
    Settembre 16, 2018, 01:16:47
  • Loretta/Nina: :Party133:
    Settembre 01, 2018, 17:05:30
  • _jan_: Ciao ai visitors!!
    Settembre 01, 2018, 17:02:31
  • Loretta/Nina: :fischio: :979:
    Agosto 28, 2018, 16:20:48
  • ketty: ah beh, meno male. ora il tempo e' un po' brutto
    Agosto 26, 2018, 13:27:36
  • _jan_: No, no, soqquà. Ci passo ma....... non c'è mai nessuno. Ammiro Nuvolotta, solitaria e presente.
    Agosto 25, 2018, 10:34:41
  • ketty: ma Jan è andato in vacanza? :Cartelli70:
    Agosto 24, 2018, 20:51:59
  • ketty: ciao a tutti.
    Agosto 24, 2018, 20:50:12
  • nuvolotta: :faccina_fiore: ciao ragazzioli/ole...
    Agosto 19, 2018, 23:03:49
  • Loretta/Nina: :ciao: :Party133:
    Agosto 19, 2018, 20:24:28
  • _jan_: :Felici13:
    Agosto 04, 2018, 15:30:40
  • nuvolotta: Ferie... già fatte....
    Agosto 04, 2018, 09:54:58
  • _jan_: Auguri di buon onomastico a tutti gli Alfonso....
    Agosto 01, 2018, 11:10:21
  • _jan_: chiusp per ferie?
    Luglio 30, 2018, 19:50:58
  • _jan_: Buon onomastico a Donatella Seconda........ e la prima? :Shok145:
    Luglio 30, 2018, 06:59:38
  • _jan_: Buon onomastico a tutte le Marta.  :Amore20:
    Luglio 29, 2018, 07:44:31
  • _jan_: Ci sono altre nuove iscritte viste il 26 luglio 2018..... (mica saranno monache)....  :approva:
    Luglio 26, 2018, 18:39:04
  • _jan_: Oggi, 26 luglio 2018, abbiamo una nuova iscritta "Francesca".....Benvenuta Francesca.  :Party133:
    Luglio 26, 2018, 15:49:24
  • _jan_: Buon onomastico anche a tutte le Anna!!! .....
    Luglio 26, 2018, 10:30:21
  • _jan_: Auguri di Buon Onomastico a TUO..... (ogni giorno, credo)..... :sm269:
    Luglio 26, 2018, 10:28:52
  • ketty: ma.... quando è il tuo?
    Luglio 25, 2018, 19:52:19

* Emoticon aggiuntive e link al portale


Autore Topic: -2- Gestione completa (o quasi) del DB (Data Base) (MySQL & PHP)  (Letto 2693 volte)

0 Utenti e 2 Visitatori stanno visualizzando questo topic.

Offline micdas

  • Administrator
  • Hero Member
  • *****
  • Post: 848
  • Sesso: Maschio
    • sito su Excel ed il suo vba
 :hihihi:
Credevo di passare subito a descrivere la piccola gestione DB, ma andando avanti ho pensato che prima c'era da chiarire alcuni punti senza i quali copiereste sì il codice che posto, ma, se dovesse poi succedere qualcosa di imprevisto, non sapreste poi dove mettere le mani.
Quindi...................ecco un'altra puntata teorica.

Prima di continuare con l'esplorazione della nostra gestione è bene soffermarci un attimino su alcune considerazioni che vanno fatte sulle Query, altrimenti ci si ritrova con una montagna di codice e non si sa da dove iniziare.
Nel 3D precedente abbiamo detto che le Query possono essere di lettura o scrittura.
Una Query manda una "richiesta" al "Data Base" attivo.
Per Query con SELECT, SHOW, DESCRIBE, EXPLAIN ed altre dichiarazioni restituisce dei valori o FALSE
Per Query con DELETE, INSERT, REPLACE, UPDATE, DROP ed altre dichiarazioni restituisce TRUE o FALSE

I passi da seguire per agire con un DB, prima di offrirgli una Query, sono questi:
  • creare la Query che vogliamo mandare in esecuzione
  • Impostazione dei dati per la connessione
  • Quindi iniziare aprendo una connessione verso il nostro DB
  • Il passo successivo è quello di specificare il nome del database al quale ci vogliamo connettere
  • Poi avremo l'istruzione successiva per eseguire la Query
  • Alla fine è buona norma chiudere la connessione al DB
Il tutto può essere definito come in questo frammento di codice dove mettiamo anche una sorta di controllo di eventuali fallimenti:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
    $Query 
"quello che vuoi";
    if (!
$link mysql_connect($Host$User$Password)) {
        echo 
"errore nella connessione<br />".mysql_error() . "<br />\n";
    } else {
        echo 
"La connessione è avvenuta con successo<br />\n";
    }
    if (!
mysql_select_db($DBName$link)) {
        echo 
"DataBase non trovato<br />".mysql_error() . "<br />\n";
    } else {
        echo 
"Il database è stato agganciato con successo<br />\n";
    }
    
$result mysql_query($Query$link);
    if (!
$result) {
        echo 
$Query "<br />";
        die (
"errore nella query<br />".mysql_error());
    } else {
    ................
    }
    
mysql_close ($link);
?>
Per comprendere meglio il tipo di errore che eventualmente si verifichi, abbiamo a disposizione la funzione MySQL mysql_error()
Se ci aspettiamo che la Query ci debba restituire dei valori possiamo leggere tali valori in queto modo:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$result 
mysql_query($Query$link);
if (!
$result) {
echo 
'Errore nella Query: ' mysql_error();
}
if (
mysql_num_rows($result) > 0) {
while (
$row mysql_fetch_assoc($result)) {
echo 
$row['Field'] . "<br />\n";
}
}
?>
Se la Query è una semplice Query di comando (quindi non ci aspettiamo alcun valore restituito), possiamo terminare qui la nostra procedura:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$result 
mysql_query($query$link);
if (!
$result) {
echo 
"errore nella query<br />\n" $query "<br />";
}
?>

Il discorso si potrebbe concludere qui. Ma è bene che mostrare almeno alcuni esempi di query per compiere le più comuni operazioni.


Elenco di tutte le tabelle presenti nel DB
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SHOW TABLES FROM $DBName";Questa Query potrebbe tornarci utile per poter decidere se:
* dobbiamo creare una tabella
* dobbiamo eliminare una tabella

Creazione di una tabella
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "CREATE TABLE rubrica (id mediumint unsigned NOT NULL auto_increment, cognome varchar(100), nome varchar(100), nato DATE NOT NULL DEFAULT '0000-00-00', indirizzo varchar(100), cap varchar(10), citta varchar(100), prov varchar(10), tel1 varchar(20), tel2 varchar(20), tel3 varchar(100), PRIMARY KEY (id)) ENGINE = MyISAM";
Eliminazione una tabella
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "DROP TABLE rubrica";
Lettura dei campi di una tabella
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$table = "rubrica";
$Query = "SHOW COLUMNS FROM " . $table;

Conoscere il numero di record:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SELECT * FROM " . $table;
$result = mysql_query($Query, $link);
$num_rows = mysql_num_rows($result);
echo $num_rows . " record nella tabella " . $table> . "<br />\n";

Una volta creata una tabella è possibile eseguire diverse operazioni. Tra le principali abbiamo queste:
* Inserimento dei dati
* Modifica dei dati
* Eliminazione dei dati
* Visualizzazione dei dati

Inserimento dei dati
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "INSERT INTO rubrica(id, cognome, nome, nato, indirizzo, cap, citta, prov, tel1, tel2, tel3) VALUES ('0', 'Liberali', 'Franca', '2004-08-20', 'VIA MARCHESANE, 232', '36010', 'Aragona', 'TN', '036 34871949', '06 0798', '')";
Per modificare un record
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "UPDATE rubrica SET cognome = 'Migliavacca', nome = 'Luigi', nato = '2004-01-22', indirizzo = 'VIA DEL TUSCOLANO 1', cap = '14030', citta = 'Tatti', prov = 'MC', tel1 = '054/458798', tel2 = '555/4568978', tel3 = '054/458798' WHERE id = 1";
Per eliminare un record
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "DELETE FROM rubrica WHERE id = '1'";
Lettura dei dati
Qui entriamo nel cuore della gestione vera e propria, ma anche la più complessa.
Quindi iniziamo senz'altro dalla più semplice per arrivare a quella più complessa, almeno nel nostro caso.

Mostra tutti i dati di tutti i campi di una tabella
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SELECT * FROM rubrica";
Mostra i dati dei soli campi indicati nella Query
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SELECT cognome, nome, indirizzo FROM rubrica";
Pone una condizione nella scelta dei record
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SELECT * FROM rubrica WHERE nome = 'Matteo'";
Pone più condizioni (è possibile usare nella clausola WHERE un AND oppure un OR)
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SELECT cognome, nome, indirizzo FROM rubrica WHERE nome = 'Matteo' AND citta <> 'Venezia'";
Effettua una ricerca tramite una porzione di stringa su un campo
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SELECT * FROM rubrica WHERE cognome LIKE '%a%'";
Effettua una ricerca tramite una porzione di stringa su più campi
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SELECT * FROM rubrica WHERE cognome LIKE '%a%' OR nome LIKE '%a%' OR citta LIKE '%a%'";
Restituisce un elenco ordinato dei record
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$Query = "SELECT * FROM rubrica ORDER BY nome";

Dopo ogni connessione al DB, proposta della Query, ed eventuale visualizzazione dei dati da quest'ultima restituiti, è buona norma chiudere il collegamento aperto per rilasciare le risorse impegnate.
Ma nella stessa istanza è possibile eseguire anche più Query ricordandosi tuttavia di chiudere alla fine l'istanza aperta precedentemente.
Codice: Non sei autorizzato a vedere i links. Registrati o Login
mysql_close ($link);
Ora, prima di concludere vediamo un piccolo esempio completo come riportato nel codice di esempio qui di seguito.
In questo esempio vogliamo trovare nella tabella tutti i nostri contatti che abitano in una città che hanno all'interno del loro nome la stringa "co":
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
if (!$link mysql_connect($Host$User$Password)) {
    echo 
"errore nella connessione<br />".mysql_error() . "<br />\n";;
} else {
    echo 
"La connessione &egrave; avvenuta con successo<br />\n";
}
if (!
mysql_select_db($DBName$link)) {
    echo 
"DataBase non trovato<br />".mysql_error() . "<br />\n";;
} else {
    echo 
"Il database &egrave; stato agganciato con successo<br />\n";
    
$Query "SELECT * FROM " $table;
    echo 
"La Query per contare i record<br />\n" $Query "<br />\n";
    
$result mysql_query($Query$link);
    
$num_rows mysql_num_rows($result);
    if (
$num_rows != 0) {
        echo 
"Nella tabella " $table " ci sono 
        " 
$num_rows " record<br />\n";
        echo 
"Ora vediamo quante citt&agrave; contendono 
        nel loro nome la stringa \"co\"<br />\n"
;
        
$Query "SELECT * FROM rubrica WHERE citta LIKE '%co%' ORDER BY nome";
        echo 
"La Query:<br />\n" $Query "<br />\n";
        
$result mysql_query($Query$link);
        if (!
$result ) {
            echo 
"Errore nella Query<br />\n" mysql_error() . "<br />\n";
        } else {
            if (
mysql_num_rows($result)) {
                echo 
"I record trovati<br />\n";
                echo 
" <div align=\"center\">\n";
                echo 
"<table>\n";
                echo 
"<tr>\n";
                echo 
"<th>cognome</th>\n";
                echo 
"<th>nome</th>\n";
                echo 
"<th>citta</th>\n";
                echo 
"<th>prov</th>\n";
                echo 
"</tr>\n";
                while (
$row mysql_fetch_array($result)) {
                    echo 
"<tr>\n";
                    echo 
"<td>" $row['cognome'] . "</td>\n";
                    echo 
"<td>" $row['nome'] . "</td>\n";
                    echo 
"<td>" $row['citta'] . "</td>\n";
                    echo 
"<td>" $row['prov'] . "</td>\n";
                    echo 
"</tr>\n";
                }
                echo 
"</table>\n";
                echo 
"</div>\n";
            } else {
                echo 
"Nessun record trovato<br />\n";
            }
        }
    } else {
        echo 
"Nessun record trovato nella tabella " $table "<br />\n";
    }
}
mysql_close ($link);
?>

Per la chiusura del collegamento è da notare che avviene solo dopo l'esecuzione della seconda Query e la visualizzazione del Resultset restituito.
Questo potrebbe essere un possibile risultato che il codice sopra riportato potrebbe restituire:
Citazione
La connessione è avvenuta con successo
Il database è stato agganciato con successo
La Query per contare i record
SELECT * FROM rubrica
Nella tabella rubrica ci sono 25 record
Ora vediamo quante città contendono nel loro nome la stringa "co"
La Query:
SELECT * FROM rubrica WHERE citta LIKE '%co%' ORDER BY nome
I record trovati
cognomenomecittaprov
ScicchitanoAndreaCodenaRO
MainiMarilenaCossilaTO
Di MaggioMarioCopertinoPC
MainiMirellaSan Donato in CollinaCL

ATTENZIONE:
TUTTI I NOMI CHE FIGURANO NEI MIEI ELENCHI PRESENTI E FUTURI NON SI RIFERISCONO ASSOLUTAMENTE A PERSONE REALI.
Anche se li ho prelevati da un archivio reale li ho passati in Excel, mescolati casualmente tutti i campi.

Questa precisazione per quanto riguarda le disposizioni sulla privaci.
« Ultima modifica: Dicembre 05, 2010, 11:20:56 da micdas »
E' stupido pensare di non aver bisogno degli altri

Offline _jan_

  • Global Moderator
  • Sottocapo di 1° classe scelto (S.P.E.)
  • *
  • Post: 1727
  • Sesso: Maschio
  • comply 23 novembre
    • Firenze e molto altro
Re:-2- Gestione completa (o quasi) del DB (Data Base) (MySQL & PHP)
« Risposta #1 il: Novembre 25, 2010, 07:49:01 »
ewwai Micdas. (o Mikyssimo?)
Interessante.
Il mostro programmazione comincia diventare agnello
Quando credi di sapere qualche cosa è quello il momento di ricominciare