PDO exec() e query()

Una volta aperta una connessione a database via PDO, possiamo eseguire statement SQL per mezzo di un paio di funzioni, exec() che esegue lo statement e ritorna il numero di righe che sono state interessate dall'esecuzione dello statement, e query() che ritorna il resultset determinato dall'operazione.

Per prima cosa scriviamo una versione per PDO della funzione che avevamo già scritto per mysqli che visualizza tutte le righe della tabella product, e la mettiamo nella libreria delle nostre funzioni di utilità generale.

Accetta in input un parametro, l'handle PDO al database, chiamo su tale handle la funzione query() per fare la select di tutti i product, e sul resultset risultante faccio una foreach per scandire le righe risultanti (é una simpatica caratteristica della funzione query(), torna un resultset abilitato a gestire iteratori) e mi faccio una printf dei valori trovati:
function pdo_list_products($dbh)
{
$query = "SELECT sku, name, price FROM products ORDER BY id";
foreach($dbh->query($query) as $row)
printf("(%s) %s: €%s<br />", $row['sku'], $row['name'], $row['price']);
}
Fatta questa funzione di libreria, pensiamo alla nostra nuova pagina php. Qui vogliamo fare una update, per cambiare il nome di un nostro articolo in product. Scriviamo perciò una funzione che prende in input l'handle PDO e il nuovo nome che vogliamo dare all'articolo con codice ZP457321 (ammetto che é una funzione un po' poco realistica, ma va bene per lo scopo dimostrativo di questo post).
Eseguendo lo statement sql di update via exec() abbiamo in output in numero di righe effettivamente modificate dalla update, informazione che rendiamo disponibile all'utente:
function update_aftershave($dbh, $name)
{
$query = "UPDATE products SET name='".$name."' WHERE sku='ZP457321'";
$affected = $dbh->exec($query);
echo "<p>Total rows affected: $affected</p>";
}
E questo a seguire é il corpo principale del nostro script php. Ci connettiamo a PDO, tramite la funzione di libreria già vista nel post precedente, facciamo un primo printout della tabella con la nuova funzione di libreria pdo_list_products(), cambiamo una prima volta in nome del nostro articolo, e visualizziamo la nuova situazione a database, cambiamo una seconda volta il nome dell'articolo, e visualizziamo per l'ultima volta lo stato delle cose a database:
if(($dbh = dbo_connect()) == false)
die();

pdo_list_products($dbh);

update_aftershave($dbh, "Painful Aftershave");
pdo_list_products($dbh);

update_aftershave($dbh, "Painless Aftershave");
pdo_list_products($dbh);
Si veda qui il codice sopra descritto in azione.

Nessun commento:

Posta un commento