Ho controllato il manuale del PDO per quanto attiene le eccezioni.
Da quanto leggo ho due possibilita' : settare il gestore o usare quello previsto di defaul (SILENT).
Con SILENT il comando errato ( mi riferisco a PREPARE) torna FALSE, con il gestore settato torna una eccezione gestibile da TRY / CATCH.
Bene nell'esempio che segue il gestore e' abilitato, ma non torna alcuna eccezione
Codice PHP:
try {
$db = new PDO("mysql:host=localhost;dbname=sac;charset=utf8", DB_USER , DB_PW); } catch (PDOException $EXCEPTIONS)
{ handle_error ( $EXCEPTIONS->getMessage()); }
try { $db->setAttribute (PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING); }
catch (PDOException $EXCEPTIONS) { handle_error ( $EXCEPTIONS->getMessage()); } $email="roma@libero.it";
try { $stmt= $db->prepare("Select * anagrafe anaEmai=:anaEmai"); }
catch (PDOException $EXCEPTIONS) {handle_error ( $EXCEPTIONS->getMessage()); }
try { $stmt->bindvalue(':anaEmai', $email, PDO::PARAM_STR); }
catch (PDOException $EXCEPTIONS)
{ handle_error ( $EXCEPTIONS->getMessage()); }
try { $stmt->execute(); }
catch (PDOException $EXCEPTIONS) { handle_error ( $EXCEPTIONS->getMessage()); } $righe=$stmt->rowCount(); echo "righe " . $righe;unset($db);
Nel caso del codice del post la stringa SQL "Select * anagrafe WHERE anaEmai=:anaEmai"
e' sicuramente sbagliata.
Eppure nessuna eccezione viene generata.
Idem per il comando di BIND, ma questo puo' anche essere normale, assolutamente meno normale
per l'execute che anch'essa non torna eccezioni.
L'unico segnale che qualcosa non ha funzionato e' il valore numrow = 0 perche' io so che
per forza deve essere 1.
Mi sembra assai poco rassicurante.
Poiche' il manuale afferma che se il gestore degli errori e' settato su SILENT non viene generata alcuna eccezione ma il comando PREPARE torna FLASE ho provato anche questo :
Codice PHP:
try { $db = new PDO("mysql:host=localhost;dbname=sacradomus;charset=utf8", DB_USER , DB_PW); }
catch (PDOException $EXCEPTIONS) { handle_error ( $EXCEPTIONS->getMessage()); } $email="roma@libero.it";
$stmt= $db->prepare("Select * anagrafe WHERE anaEmai=:anaEmai");
if (!$stmt)
{ echo "Errore ";
}
else
{ echo "corretto ";
}
$stmt->bindvalue(':anaEmai', $email, PDO::PARAM_STR);
$stmt->execute(); $righe=$stmt->rowCount();
echo "righe " . $righe; unset($db);
Tutto uguale arriva alla fine, stampando "corretto" e righe 0.
Posso rileggere ancora il manuale ma non credo possa essermi utile.
Osservo inoltre, ho scritto (copiato) 4 comandi :
OPEN
STRINGA CON PARAMETRI
ASSEGNAZIONE DEI PARAMETRI
ESECUZIONE DELLA QUERY
ogni comando e' stato inserito in TRY/CATCH e nonostante questo arrivo alla
fine dello script.
DI CERTO SBAGLIO IO, pero' mi pare tutto assai bizzarro, concludo dicendo che il gestore degli errori PHP e' settato al massimo error_reporting(E_ALL);.
Grazie