LORETTA B. forum

Linguaggi di programmazione => Php e MySql (data base) => Topic aperto da: micdas - Novembre 24, 2010, 22:08:17

Titolo: -2- Gestione completa (o quasi) del DB (Data Base) (MySQL & PHP)
Inserito da: micdas - Novembre 24, 2010, 22:08:17
 :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:
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.
Titolo: Re:-2- Gestione completa (o quasi) del DB (Data Base) (MySQL & PHP)
Inserito da: _jan_ - Novembre 25, 2010, 07:49:01
ewwai Micdas. (o Mikyssimo?)
Interessante.
Il mostro programmazione comincia diventare agnello