Effettuare delle query MySql in PHP

Pagine « Indietro 1 2 Mostra Tutte Avanti »

In un sito dinamico dove si vogliono gestire un gran numero di dati, mantenere una lista di utenti o altro diventa indispensabile l’utilizzo di un database.
Questo articolo, di base per quanto riguarda il php, da per scontate le conoscenze sull’utilizzo dei database ma presenterà comunque degli esempi per i casi più comuni in modo da poter iniziare a fare pratica o risolvere piccoli problemi.
Prima di iniziare controllate le caratteristiche del vostro hosting per avere i dati di connessione al vostro database in particolare assicuratevi di averne uno.
Alcuni hosting come aruba non danno un database nella configurazione standard/economica, in altervista, netsons e simili il database deve essere attivato e potete farlo dal pannello di amministrazione dove trovate i dati per la connessione.
Se il vostro hosting dispone di cpanel potete crearne uno dal pannello database, da questo pannello dovete seguire le seguenti operazioni:
  • Create un nuovo database
  • Create un utente per quel database se non ne volete utilizzare uno esistente
  • Create un’associazione utente database

Connessione al database

Prima di iniziare ad effettuare delle operazioni su un database dovete effettuare la connessione allo stesso e selezionare il database che volete utilizzare.

La funzione mysql_connect($db_host, $db_user, $db_password); restituisce un id di connessione o false se non è riuscito a connettersi.

La funzione mysql_select_db($db_name, $db); dove $db è un id di connessione, seleziona il database $db_name e restituisce true o false a seconda.

La funzione mysql_error(); stampa l’ultimo errore mysql.

La funzione mysql_close(); chiude la connessione con il database, non è obbligatorio chiudere la connessione alla fine di uno script dato che viene chiusa automaticamente ma risulta utile se nello stesso script vogliamo connetterci a più database diversi e dobbiamo quindi chiudere la connessione con il primo per connetterci al secondo.

Durante il debugging dell’applicazione le prime due funzioni vengono spesso chiamate con un die alla fine e la stampa dell’errore mysql

  1. <?php
  2. $db_host = 'localhost';
  3. $db_user = 'username';
  4. $db_password = 'pass';
  5. $db_name = 'nomedb';
  6.  
  7. $db = mysql_connect($db_host, $db_user, $db_password) or die(mysql_error());
  8. $db2 = mysql_select_db($db_name, $db) or die(mysql_error());
  9. ?>

Che sta per: esegui la funzione e se qualcosa va male termina subito la tua esecuzione e stampa l’errore.

Questo ci permette di risolvere subito alcuni problemi, ad esempio se il nome host è sbagliato verrà visualizzato un errore simile a:

Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host ‘host_errato’ (11001) in /percorso/del/file.php on line 7
Unknown MySQL server host ‘host_errato’ (11001)

dove ci dice la funzione che ha causato l’errore, quale errore, in che file si trova e la riga del file dove si è verificato l’errore.

Questo modo di procedere non dovrebbe essere utilizzato nell’applicazione che viene messa online, messaggi strani potrebbero spaventare gli utenti o rivelare informazioni sulla struttura interna del sito.
Meglio quindi controllare se la connessione è andata a buon fine e in caso di errore visualizzare un messaggio del tipo “Il nostro server è andato a giocare a tennis, non ti preoccupare torna subito”.

Ogni script php che accede al database deve effettuare queste operazioni prima di procedere.
Per evitare ridondanza nel codice e avere quindi la possibilità di modificare più facilmente il sito è meglio creare un file unico da includere in tutti gli script che utilizzano il database.

Un esempio potrebbe essere questo:

  1. <?php
  2. // Dati per la connessione al database
  3. $db_host = 'localhost';
  4. $db_user = 'username';
  5. $db_password = 'pass';
  6. $db_name = 'nomedb';
  7.  
  8. // funzione per la connessione e selezione del database
  9. function blobDbConnect($db_host, $db_user, $db_password, $db_name){
  10. $db = mysql_connect($db_host, $db_user, $db_password);
  11. if ($db == FALSE){
  12.  return false;
  13. }
  14. $db2 = mysql_select_db($db_name, $db);
  15. if ($db2 == FALSE){
  16.  return false;
  17. }
  18. return true;
  19. }
  20. ?>

Il file php che utilizza questo file di configurazione si connette al database in questo modo:

  1. // Include il file di configurazione
  2. include("config.php");
  3.  
  4. // Se la connessione non riesce stampa un messaggio di errore
  5. if(!blobDbConnect($db_host, $db_user, $db_password, $db_name)) {
  6. print "Non riesco a connettermi al database";
  7. /*
  8. oppure altre operazioni come passare ad una pagina di errore
  9. o quello che si ritiene necessario
  10. */
  11. }

Pagine Prima Pagina 1 2Tutte2.

1 Star2 Stars3 Stars4 Stars5 Stars (Nessun voto)
Loading ... Loading ...

6 risposte a Effettuare delle query MySql in PHP

  1. Ciao,
    è possibile fare due query sql di fila?

  2. se ti riferisci a fare qualcosa del tipo

    $qh = mysql_query($primaquery);
    //eventuali operazioni
    $qh = mysql_query($secondaquery);
    //e così via

    nessuno ti vieta di farlo.

    se vuoi fare due query nella stessa mysql_query() dipende, in teoria si potrebbe fare separando le query con un ;
    ma in genere questa possibilità viene limitata anche per evitare sqlinjections

    ovviamente una cosa del genere non avrebbe senso
    $qr = mysql_query(“Select * from tabella; select * from altra tabella”);
    perchè $qr prende il risultato di una sola query

    avrebbe più senso farlo per una insert, ma anche in questo caso non c’è bisogno di fare più query, basta utilizzare una query del genere:

    INSERT INTO tabella (nome1, nome2)
    VALUES
    (dato, altrodato),
    (blabla, blabla),
    (valore, valore2)

    per inserire più valori nella stessa query, in questo modo guadagneresti anche in prestazioni

  3. Complimenti per la spiegazione davvero utile pero’ la cosa che mi chiedevo era anche possibile farlo per una pagina in particolare cioe’ facendo uscire i dati di un database in una pagina di un sito diverso conoscendo sia password che nome utente dei due database

  4. Certo, basta che nella connessione al database utilizzi i dati del database remoto.
    In questo caso se utilizzi due database devi disconnetterti dal primo prima di utilizzare il secondo con mysql_close(); che normalmente non è necessaria perchè viene eseguita automaticamente al termine dell’esecuzione dello script.
    Oppure puoi rimanere connesso ad entrambi i database ma in questo caso devi specificare per quale connessione stai facendo le query con mysql_query(“query”, $idConnessione); dove $idConnessione è il valore restituito dalla connect.

    Buona parte degli hosting non permettono la connessione al database dall’esterno e in questo caso puoi utilizzare uno script che ti faccia da ponte.

  5. Grazie per la risposta pero’ mi sono accorto di una cosa che non mi ha preso solo i dati che volevo ma anche altri dati che non c’entravano niente tipo come avesse fatto una copia del sito dove volevo prendere i dati
    c’e’ qualche link per farti vedere il codice e casomai darmi un consiglio grazie per la disponibilita’

  6. Il forum serve proprio a questo ;-)

Lascia un Commento

Indirizzo eail che non verrà pubblicatao. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© Skipstorm 2010. Buona parte del contenuto di questo sito è utilizzabile nei termini della licenza cc by-nc-sa.