Metodi dell' oggetto PDO
Breve e rapida carrellata dei metodi messi a disposizione da un' oggetto pdo, ovvero la precendete $mypdo

beginTransaction
Ci permette di dire al php che cio' che stiamo facendo potrebbe non andare a buon fine e che quindi vorremmo poter tornare in dietro in caso di insuccesso.
Questo solitamente non e' possibile se non iniziamo una transazione poiche' di default le query hanno un auto commit, ovvero una volta eseguite applicano i cambiamenti alla tabella / database senza possibilita' di tornare a come era l' attimo prima.
Quindi questa e' una vera e propria transazione , dove al suo "interno" e' possibile fare N query e riportare tutto allo stato iniziale in qualunque punto.
La sintassi e' semplicissima:
Codice PHP:
$mypdo->beginTransaction(); // punto in cui volgio cominciare a fare query in modo sicuro 

commit
Una volta iniziata una transazione , disabilitando quindi l' auto commit, saremmo noi a decidere quando terminare le nostre query o finire di effettuare le modifiche.
Con commit infatti si reimposta l' autocommit del database , eseguendo a tutti gli effetti tutte le query contenute tra beginTransaction e commit.
Codice PHP:
// inizio la transazione
$mypdo->beginTransaction();
// effettuo una o piu' query ..
// applico le query e ritorno allo stato di autocommit dell' oggetto PDO
$mypdo->commit(); 
Unica nota importante e' stare attenti a non usare piu' di un commit poiche' questo e' valido al fine di un solo beginTransaction ed entrambe non sono annidabili.
Esempio errato:
Codice PHP:
// inizio la transazione
$mypdo->beginTransaction();
// effettuo una o piu' query ..
// fino qui tutto ok quindi voglio che le modifiche siano valide
$mypdo->commit();
// poi voglio continuare ad andare avanti con la transazione ... ( sbagliato ) 
In questo caso bisogna far ripartire la transazione da quel momento in poi, anche subito dopo il commit.

Altro esempio errato:
Codice PHP:
$mypdo->beginTransaction();
// query ...
 // altra transazione annidata ( sbagliato )
 
$mypdo->beginTransaction();
 
// altre query o sotto query
 
$mypdo->commit();
// altre query su quelle fatte nella transazione annidata ( sbagliato ) 
$mypdo->commit();

Questo perche' ovviamente deve esserci un ordine logico e soprattutto di "stato" del database per effettuare dei rollBack ( vedi poi )


exec
Ci permette di effettuare una query immediatamente e di sapere il numero di linee modificate o cancellate da questa query.
Ci permette anche di effettuare query all' interno di transazioni ed in questo caso non vengono effettuate fino al commit successivo.
Se non si effettuano modifiche / eliminazioni , e' possibile comunque usare questo metodo per fare query in modo pero' poco sicuro.
Codice PHP:
echo $mypdo->exec('DELETE FROM mytable WHERE id > 0');
// sara' 3 se in mytable vi erano 3 records ... 

errorCode
Questo metodo e' specifico per sapere il codice di errore restituito da una query.
Codice PHP:
$mypdo->exec('SELECT * FROM SELECT'); // errore generato appositamente
echo $mypdo->errorCode(); 
La stringa risultante sara' per noi poco comprensibile poiche' e' una rappresentazione alfanumerica in ASCI del codice.
Puo' tornare utile pero' per sapere se durante l' utilizzo dell' oggetto pdo ci sono stati errori.
Codice PHP:
if($mypdo->errorCode() !== '' || !$mypdo->exec('SELECT * FROM SELECT'))
    echo 
'errore'

errorInfo
Come errorCode e' un metodo per sapere la "situazione" del nostro oggetto PDO.
E' decisamente piu' utile del solo errorCode poiche' il risultato non e' una stringa ma un array di 3 elementi
Codice PHP:
$mypdo->exec('SELECT * FROM SELECT'); // errore generato appositamente
echo '<pre>';
var_dump($mypdo->errorInfo()); 
La chiave 0 conterra' lo stesso codice rilasciato dall' errorCode
La chiave 1 conterra' il codice numerico specifico di riferimento all' errore
La chiave 3 conterra' il nostro "mysql_error()" , ovvero la stringa che descrive l' errore generato.
Controlli utili per questo metodo:
Codice PHP:
if(count($mypdo->errorInfo()) == 1// ... tutto ok
if(count($mypdo->errorInfo()) > 1) { // ... ci sono errori
    
$errorinfo $mypdo->errorInfo();
    echo 
$errorinfo[2]; // stringa con l' errore


getAttribute
Metodo per leggere le impostazioni del nostro oggetto PDO e di come sta pilotando il nostro database.
Esempio:
Codice PHP:
echo $mypdo->getAttribute(PDO_ATTR_SERVER_VERSION);
// stampa la versione del driver che pilota il database 
Molti i tipi di impostazioni sono descritte qui:
http://it2.php.net/manual/it/functio...tattribute.php
NOTA: non tutti gli attributi sono validi per tutti i database, quindi usare con cautela.


lastInsertId
Qualcuno ha dubbi su cosa faccia ?
Semplicemente restituisce il row ID dell' ultimo inserimento effettuato nel database.
Codice PHP:
echo (string) $mypdo->lastInsertId(); 
NOTA: non funziona con tutti allo stesso modo e non funziona, per ora, con tutti i database.
Attualmente comunque va su MySQL come su SQLite senza problemi , si comporta in modo differente con Postgre e visto che gli altri hanno comunque funzioni analoghe penso che a breve sara' universale.


prepare
Il modo piu' sicuro per eseguire una query con dati "esterni" , ci permette di scrivere con disinvoltura query senza doverci preoccupare delle sql injections ( per chi non sa cosa sono, leggi l' articolo su freephp ).
$mypdo->prepare($query[, $array]);
$query => la nostra query sql che puo' contenere uno o piu' simboli identificativi.
Per simbolo identificativo si intende un punto di domanda oppure un nome preceduto dai due punti ( : ) .
Esempio query:
'SELECT * FROM mytable WHERE id = ? OR user = ?'
oppure
'SELECT * FROM mytable WHERE id = :id OR user = :user' // decisamente piu' leggibile
Vedremo negli Statements come utilizzare / popolare questo tipo di query con i nostri dati .
$array => un' array contente le informazioni utili all' oggetto PDO per leggere / usare la query come noi desideriamo.
Le piu' comuni sono PDO_ATTR_CURSOR , il quale ci permette di usare il secondo esempio di stringa query, e PDO_CURSOR_SCROLL che restituisce un cursore scrollabile.


query
Esegue una query direttamente senza preparare alcunche' e ne restituisce il risultato.
Molto utile per query senza dati sensibili e soprattutto molto veloce in fase di utilizzo poiche' senza usare *_num_rows o *_fetch_array o simili si puo' interagire direttamente come se fosse un array di risultati con cursore interno.
Esempio:
Codice PHP:
foreach($mypdo->query('SELECT id, user FROM mytable') as $row)
     echo 
$row['id'].' - '.$row['user'].'
'

NOTA: come il "vecchio" *_unbuffered_query necessita che il cursore sia alla fine prima di poter essere riutilizzato.
Teoricamente non e' cosi' per tutti i databases ma sarebbe bene usare questo metodo solo quando siamo certi che ci sara' un risultato valido da mostrare / usare / scorrere fino alla fine.


quote
Analogo a mysql_escape_string o mysql_real_escape_string permette di quotare in modo giusto per il tipo di database la stringa interessata.
Ci permette quindi di usare metodi come exec o query con dati di tipo stringa sensibili.
Esempio:
Codice PHP:
$mypdo->exec('INSERT INTO mytable VALUES( 1, '.$mypdo->quote('beer \\\\'n wine').')'); 
$mypdo->quote('beer \\'n wine') = 'beer ''n wine' con apici di apertura e chiusura compresi.
Facile ?


rollBack
Ricordate il metodo beginTransaction ? Ebbene con questo e' possibile far tornare il nostro database come era.
In pratica serve a mandare a trote tutte le query fatte tra beginTransaction() e rollBack() , permettendoci di effettuare transazioni sicure e di salvaguardare i nostri dati o il nostro database da operazioni inutili o che non hanno dato il risultato sperato.
Esempio ?
Codice PHP:
$mypdo->beginTransaction();
$mypdo->exec('DROP TABLE mytable');
$mypdo->rollBack(); // la tabella mytable rimarra' invariata :-) 

setAttribute
Come ogni OOP che si rispetti la dove c'e' un "get" c'e' anche un "set" , soprattutto quando si tratta di impostazioni.
Ed ecco che con $mypdo->setAttribute(); e' possibile settare le impostazioni del nostro oggetto PDO, ad esempio specificando se l' autocommit deve essere attivo ( default ) o disattivo cosi' da poter fare rollBacks in qualunque momento.
Esempio:
$mypdo->setAttribute(ATTRIBUTO_PDO, $valore_generico);
ATTRIBUTO_PDO e' un attributo dedicato pdo, alcuni sono elencati in questa pagina:
http://it2.php.net/manual/it/functio...tattribute.php
altri sono quelli che si possono leggere con PDO::getAttribute()
Altro esempio:
Codice PHP:
$mypdo->setAttribute(PDO_ATTR_AUTOCOMMIT0);
echo (string) 
$mypdo->getAttribute(PDO_ATTR_AUTOCOMMIT);
// sara' 0 quindi l' autocommit e' disabilitato 
NOTA: come e' per il getAttribute, il setAttribute non ha valori universali, i parametri devono essere supportati dal tipo di database che stiamo utilizzando.