La connessione php-mysql con MySQLi



Documenti analoghi
CONCETTO DI ANNIDAMENTO

PHP e MySQL. Guida scaricata da

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Sommario 1 Introduzione progetto Integrazione GUI HL Conclusioni... 13

19. LA PROGRAMMAZIONE LATO SERVER

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Al giorno d oggi, i sistemi per la gestione di database

Progettazione di un Database

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Note per generazione file.txt per invio trimestrale V.P. all AGENZIA DELLE ENTRATE

Mac Application Manager 1.3 (SOLO PER TIGER)

Dispensa di database Access

Introduzione JDBC interfaccia java.sql driver caricare i driver

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Lifephone. Introduzione. Database. Sito

Manuale Gestore. STWS Web Energy Control - Servizio di telelettura sul WEB

PHP - Storia. Inizialmente sviluppato da Rasmus Lerdorf come serie di script CGI

Capitolo 1 Installazione del programma

Indice Configurazione di PHP Test dell ambiente di sviluppo 28

Registratori di Cassa

Con.Te Gestione Console Telematici

SCUOLANEXT GUIDA APP DIDUP DEL 28/02/2015

Accise Settore Prodotti Alcolici Manuale d uso

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

MUDE Piemonte. Modalità operative generazione Procura speciale

Programmazione Orientata agli Oggetti in Linguaggio Java

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

SQL/OLAP. Estensioni OLAP in SQL

Progettazione Web Applicazioni client-server

Installazione del software Fiery per Windows e Macintosh

1.1 Installare un nuovo Client di Concept ed eseguire il primo avvio

GUIDA AL PRONTUARIO MOBILE

Come funziona il WWW. Architettura client-server. Web: client-server. Il protocollo

Hub-PA Versione Manuale utente

Volumi di riferimento

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

Procedura SMS. Manuale Utente

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Esercitazione 4 JDBC

MANUALE ESPERTI PON 2007/2013

Cliens Gestione Studio Legale Modifica dei Reports

CONFIGURAZIONE DI UN AZIENDA IN MODALITÀ REAL TIME

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Supporto On Line Allegato FAQ

Indice GAMMA. Guida utente

Presentazione Data Base

IOL_guidaoperativa_gestione_allegati-1 0.doc 1 INTRODUZIONE ALL USO DELLA GUIDA SIMBOLI USATI E DESCRIZIONI GESTIONE ALLEGATI...

MySQL Database Management System

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

HBase Data Model. in più : le colonne sono raccolte in gruppi di colonne detti Column Family; Cosa cambia dunque?

ALICE AMMINISTRAZIONE UTENTI WEB

MODULO 5 ACCESS Basi di dati. Lezione 4

Concetto di Funzione e Procedura METODI in Java

Presentazione MyMailing 3.0

Corso di Sistemi di Elaborazione delle informazioni

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

ANNO SCOLASTICO: DISCIPLINA: INFORMATICA CLASSE: 5 SI INDIRIZZO: SISTEMI INFORMATIVI DOCENTI: TISO EMANUELE BARBARA SECCHI

XML e PHP. Gestire XML con PHP. Appendice

Apache 2, PHP5, MySQL 5

ISI s.r.l. Corso di Access 05 CREARE UN ELENCO MAILING ED INVIARE MESSAGGI DI POSTA ELETTRONICA Pag. 1/6

Capitolo 13. Interrogare una base di dati

Politica del WHOIS relativa al nome a dominio.eu

Programmazione a Oggetti Modulo B

5.6.1 REPORT, ESPORTAZIONE DI DATI

Portale Suap SPORVIC2 Manuale Prerequisiti tecnici di sistema

Lavorare con MySQL Parte Seconda.

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Gestione Turni. Introduzione

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

WEBGATE400 ACTIVEX CONTROL. Manuale Programmatore

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Obiettivo dell esercitazione

Argo Mobile. Gestione Assenze. Manuale d Installazione e d uso del prodotto

Gestione Automatizzata di una Lista Nozze

Introduzione alla consultazione dei log tramite IceWarp Log Analyzer

PORTALE CLIENTI Manuale utente

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Modulo 4: Ereditarietà, interfacce e clonazione

Database. Si ringrazia Marco Bertini per le slides

Monitor Orientamento. Manuale Utente

RELAZIONE TECNICA GESTIONE CARTE DI CREDITO. a cura di EMANUELE CESARI

ALLEGATO Esempio di questionario per la comprensione e valutazione del sistema IT

FPf per Windows 3.1. Guida all uso

Distribuzione Software. Documentazione Tecnica. Copernico. Iva 22% - Interventi Predisposti

Agent, porte, connettività e reti L agent di Kaseya utilizza la porta 5721 per comunicare con il server, ma che tipo di porta è?...

Manuale di Aggiornamento BOLLETTINO. Rel H4. DATALOG Soluzioni Integrate a 32 Bit

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

Transcript:

La connessione php-mysql con MySQLi Premessa Lo scenario che si intende alla base di questo capitolo è di disporre di un ambiente phpmysql rappresentato nel seguente schema: L'applicazione php viene eseguita dal server web, per accedere a un database deve essere attivata una connessione con il server MySql. Presentiamo qui l'estensione MySQLi (MySQL Improved Extension) che quindi è una estensione 'migliorata' rispetto alla precedente 'MySQL Extention'. Obiettivo di queste enstensioni è di fornire strumenti di accesso a DataBase ad alto livello, senza cioè dover implementare il protocollo di comunicazione fra client (php) e server (MySQL). La release MySQLi qui presentata offre strumenti orientati allo sviluppo ad oggetti che invece erano assenti nella precedente. Per garantire compatibilità con la grossa mole di software già esistenti sviluppati secondo il paradigma procedurale in realtà anche MySQLi offre delle funzioni di tipo procedurale, pertanto nelle pagine di manuale si trovano sempre doppia indicazione: object oriented syle: l'implementazione orientata agli oggetti, a cui qui facciamo riferimento procedural style: l'implementazione procedurale che qui tralasciamo. Inoltre segnalo che in rete si trovano moltissimi esempi di script php che accedono a data base la maggior parte dei quali sono sviluppati seguendo il modello procedurale, per cui raccomando attenzione per non perdersi in ibridi procedural-oggetto che sconsiglio. La classe MySQLi Gli oggetti di questa classe hanno il compito di rappresentare la connessione fra php e un database MySQL. Connessione al database La funzione di connessione è associata all'istanza dell'oggetto, quindi è compito del costruttore della classe l'attivazione della connessione ( vedi http://it.php.net/manual/en/mysqli.construct.php ). Il costruttore ha dunque bisogno di quattro informazioni basilari: host in cui risiede il server MySQL a cui connettersi username password database identifier che devono essere passate come parametro all'istanziazione dell'oggetto. OOPhp La connessione php-mysql con MySQLi 1

Esempio: $db=new MySQLi('localhost','root','','ilmiodb'); Come si vede i quattro parametri sono stringhe, nell'esempio si indica che il server mysql risiede sullo stesso host del server web-php, le credenziali di accesso sono per utente root privo di password (cosa frequente in macchine di sviluppo, ma totalmente errate su un server in produzione!) e il database ha identificatore 'ilmiodb'. Classe di connessione personalizzata In base a quanto visto l'istanza di un oggetto di classe MySQLi produce la connessione al database. In una applicazione web tipicamente sono presenti molti script php ognuno dei quali avrà necessità di accedere al database, pertanto in ognuno verrà istanziato un oggetto per la connessione fornendo ogni volta i parametri adeguati. Punto debole di questa situazione è che se c'è bisogno di modificare un parametro di connessione (ad esempio la password) sarà necessario effettuare la modifica in tutte le occasioni in cui è prevista la connessione. Per questo motivo invece che specificare i parametri ad ogni esigenza di istanza di connessione può essere più efficace definire una propria classe di connessione che estende MySQLi su cui si ridefinisce il costruttore con i parametri impostati, ad esempio: //file ConnessioneDb.php class ConnessioneDb extends MySQLi{ function construct() { parent:: construct('localhost','root','','ilmiodb'); I vari script dell'applicazione potranno ottenere la connessione istanziando un oggetto di classe ConnessioneDb senza specificare parametri. Qualora uno dei parametri dovesse essere modificato andrà ritoccato il solo costruttore della classe ConnessioneDb e tutti gli script dell'applicazione saranno implicitamente aggiornati. Query Il metodo query consente l'invio al dbms di un comando, con la conseguente esecuzione e ottenimento del risultato. mixed query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) Il parametro stringa $query rappresenta il comando da inviare al dbms, sarà in generale un comando SQL. Il secondo parametro opzionale al momento lo tralasciamo (assumerà quindi il suo valore di default) Il valore di ritorno del metodo sarà: in caso di fallimento della query viene restituito il valore false OOPhp La connessione php-mysql con MySQLi 2

in caso di successo della query viene restituito: se la query è del tipo SELECT, SHOW, DESCRIBE, EXPLAIN un oggetto di classe MySQLi_Result negli altri casi valore true Si rimanda al paragrafo seguente il dettaglio sulla classe mysqli_result Esempio di uso: La classe MySQLi_Result Un oggetto di questa classe rappresenta la tabella risultato ottenuta da una query. Su questa tabella l'oggetto tiene un riferimento (cursore) ad una particolare riga, che chiamiamo riga corrente. All'istanza dell'oggetto la riga corrente è la prima. La riga indirizzata dal cursore può essere accessibile con più di una modalità, qui per ora ne prendiamo in esame una. Metodo fetch_assoc() Questo metodo restituisce la riga corrente del risultato come array associativo in cui le chiavi sono costituite dagli identificatori di colonna della tabella risultato. Inoltre il cursore vine spostato alla riga seguente (se disponibile). Se il cursore è a fine tabella il metodo retituisce NULL. Esempio $riga = $ris->fetch_assoc(); // $riga è un array che contiene: // 'nome'=>'mario', 'cognome'=>'rossi', 'telefono'=>'0512345678' Frequentemente si ha interesse a scandire l'intera tabella risultato, pertanto questa istruzione viene inserita in un ciclo controllato dal confronto con il valore NULL che indica il raggiungimento di fine tabella. Esempio: while ( ($riga=$ris->fetch_assoc())!== NULL ) { // elaboro $riga secondo la finalità specifica dell'applicazione Attributo num_rows Questo attributo contiene il numero di righe della tabella risultato OOPhp La connessione php-mysql con MySQLi 3

Esempio: visualizzazione dei dati di una tabella Ecco un esempio di come possa essere eseguita la connessione, query e visualizzazione dei dati del risultato. require_once "ConnessioneDb.php"; echo "La rubrica contiene {$ris->num_rows contatti<br>\n"; while ( ($riga=$ris->fetch_assoc())!=null) { echo "{$riga['nome'] {$riga['cognome'] {$riga['telefono'] <br>\n"; Gestione degli errori Partiamo dell'esempio del paragrafo precedente, in particolare le due righe che eseguono connessione/query: e poniamoci l'obiettivo di verificare che ognuna di queste due abbia avuto successo. Se infatti per qualche motivo fallisce la connessione non ha senso tentare di eseguire una query. In modo simile se fallisce l'esecuzione di una query non ha senso trattare il risultato. Errore di connessione La classe MySQLi rende disponibile l'attributo connect_error che contiene: in caso di successo nella connessione il valore NULL in caso di errore una stringa con messaggio che descrive l'errore riconosciuto Quindi ecco una possibile applicazione: if ($db->connect_error){ //connect_error non ha valore null, quindi c'è stato errore di connessione die('connection failed: '.$db->connect_error); Si noti l'uso del die che interrompe l'esecuzione dello script, infatti avevamo già osservato che in assenza di connessione non ha senso proseguire. Errore su query La classe MySQLi rende disponibile l'attributo error In modo simile a quanto visto prima questo attributo riporta informazioni su condizioni di errore, in particolare si riferisce all'esito della più recente esecuzione di un metodo della classe (che non sia il costruttore). L'atttributo contiene: OOPhp La connessione php-mysql con MySQLi 4

in caso di successo una stringa vuota in caso di errore una stringa con messaggio che descrive l'errore riconosciuto Quindi ecco una possibile applicazione: if ($db->error){ //error non ha stringa vuota, quindi c'è stato errore di query die('query failed: '.$db->error); Anche in questo caso il riconoscimento dell'errore viene trattato interrompendo lo script. Classe di connessione con gestione dell'errore Nella maggior parte delle applicazioni che prevedono l'accesso a database si ripetono in vari punti le istruzioni di connessione e/o esecuzione di query, per ognuna di queste è bene effettuare la verifica. Possiamo quindi pensare di portare la verifica all'interno della classe di gestione della connessione e di fatto liberare l'applicazione dall'onere di effettuare la verifica ogni volta. class ConnessioneDb extends MySQLi{ function construct() { parent:: construct('localhost','root','','rubrica'); if ($this->connect_error){ die('connection failed: '.$this->connect_error); function query($query) { $ris=parent::query($query); if ($this->error){ die('query failed: '.$this->error." query='$query'"); return $ris; cc cc Quest'opera è stata rilasciata con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Italia. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-nc-sa/3.0/it/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. Giovanni Ragno ITIS Belluzzi Bologna 2011 OOPhp La connessione php-mysql con MySQLi 5