gli esempi che hai fatto sono due casi troppo diversi, in uno usi le transazioni e nell'altro no... e cmq potevi usare nel primo lo stesso approcio del secondo. io posso dirti quando è preferibile usare i prepared statements.
anzitutto per motivi di sicurezza, le sql injection sono praticamente impossibili usando questo approcio
per il resto ti faccio un esempio banale ma concreto di quando è preferibile usarle:
codice:
$mioArray = array(
1,
2,
3,
4,
5
);
$sth = $dbh->prepare("SELECT * from tabella where id = :id");
foreach($mioArray as id) {
$sth->bindParam(':id', $id);
$sth->execute();
}
ora è chiaro che in questo caso serve a poco ma immginalo con una query che deve ricevere dall'esterno un gran numero di parametri... la prepare basta farla una sola all'esterno del ciclo, poi viene riutilizzata passando i valori con bindParam, senza bisogno di inizializzare ogni volta $sth all'interno del foreach, risparmi risorse e l'esecuzione è piu veloce se devi farne qualche centinaio...