Ciao a tutti,
settimana scorsa stavo realizzando a scopo didattico un semplice sistema di registrazione/login alla vecchia maniera (no OOP e funzioni mysql).. poi stesso qui sul forum mi è stato consigliato di passare a PDO e magari anche a scrivere codice oop, per cui seguendo le varie guide qui sul sito, ho trasformato questo:

Codice PHP:
$db_user 'root';
$db_password '123456';
$db_host 'localhost';
$link msqly_connect("db_host","$db_user","$db_password") or die ("Errore connessione");
$db mysql_select_db("SVILUPPO") or die ("Errore selezione DB");

$loginform mysql_real_escape_string($_POST["login"]);
$passwordform mysql_real_escape_string($_POST["password"]);
$emailform mysql_real_escape_string($_POST["email"]);

if (
strpbrk($loginform",;'-+()=><@[]{} ") || strpbrk($passwordform",;'+()=><@[]{} ") || strpbrk($loginform",;'+()=><[]{} ")) {
   echo 
"caratteri non validi";
   
header("Refresh: 2, URL:http//localhost/registrati.html");
   return;
}

/*---query di inserimento---*/ 
in questo:

Codice PHP:
$db_user 'root';
$db_password '123456';
$db_host 'localhost';
$db_name 'SVILUPPO';

$col "mysql:host=$db_host; dbname=$db_name";

try {
   
$db = new PDO($col"$db_user""$db_password");
}

catch(
PDOException $e)   {
   echo 
"Errore: ".$e->getMessage();
}

$loginform = ($_POST["login"]);
$passwordform = ($_POST["password"]);
$emailform = ($_POST["email"]);

$sql $db->prepare("SELECT * FROM utenti WHERE login = '".$loginform."'"); 
$sql->execute(); 
$sql2 $db->prepare("SELECT * FROM utenti WHERE email = '".$emailform."'");
$sql2->execute(); 

if (
$sql->fetchAll())   {
   echo 
"Username già presente";
}elseif (
$sql2->fetchAll())   {
   echo 
"Email già registrata";
}else{
   
/*registrazione nel db*/ 
Sembra che tutto funzioni, ma non avendo mai utilizzato PDO, non so se manca qualcosa...
Ad esempio, se elimino il blocco "catch{...} mi viene segnalato un errore di sintassi; è perchè il blocco è obbligatorio o perchè ho toppato qualche apice?
Inoltre, leggevo da vari commenti qui sul forum che PDO mette al riparo automaticamente dai problemi legati all'SQL-Injection... ma in che modo? I controlli effettuati tramite mysql_real_escape_string e dall'espressione regolare per eliminare apici e altri caratteri potenzialmente dannosi nel primo codice, come sono gestiti in PDO?
Altra cosa, sto cercando di passare man mano alla oop e riconosco nel secondo esempio la sintassi tipica, ma mi aspettavo anche di trovare definizioni di classi, metodi ecc che invece non vedo da nessuna parte e l'unica cosa che mi viene in mente è che possano già essere definite di default in qualche altro posto... dove?