Scusate ma mi sto proprio innervosendo.
Allora ho esteso la classe pdo riscrivendo il metodo construct.
Questa struttra non permette di sollevare l'eccezzione nel caso ci fosse un errore nella connessione al db.
Mi sono detto bene, che pirla che sono, se gli setto l'attributo dopo aver invocato il costruttore è normale che non avvenga il catch.
ho provato a mettere l'array in questo modo :
parent::__construct($dns, $settings['database']['username'], $settings['database']['password'],array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING))
ma questo non setta correttamente err_mod
Se io faccio un get attribute dopo aver creato l'oggetto mypdo (facendo in modo che la connessione vada a buon fine) il mio err_mode è 0 (cosa che dovrebbe essere due)
Codice PHP:
<?php
class MyPDO extends PDO {
public function __construct ($file = 'config/my_setting.ini') {
try{
if (!$settings = parse_ini_file($file, TRUE)) throw new exception('Unable to open ' . $file . '.');
$dns = $settings['database']['driver'] .
':host=' . $settings['database']['host'] .
((!empty($settings['database']['port'])) ? (';port=' . $settings['database']['port']) : '') .
';dbname=' . $settings['database']['schema'];
parent::__construct($dns, $settings['database']['username'], $settings['database']['password']);
self::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
//COMPORTAMENTO COMUNE PER
echo 'Connection failed: ' . $e->getMessage();
exit();
}
}
}
?>