Ho scritto una classe wrapper del database per aiutare con le query e sto cercando di capire il modo migliore per implementare i blocchi try-catch.
Nella mia classe di database, ho una funzione di supporto;
public function fetchAll($sql, $bind = array()) {
$stmt = $this->query($sql, $bind);
$result = $stmt->fetchAll($this->_fetch_mode);
return $result;
}
che posso chiamare al di fuori della classe:
$this->db->fetchAll($sql,[$var1,$var2]);
La mia domanda è dove mettere i blocchi try-catch. Sarebbe "più facile" se li inserissi semplicemente nella mia classe di database:
public function fetchAll($sql, $bind = array()) {
$stmt = $this->query($sql, $bind);
try {
$result = $stmt->fetchAll($this->_fetch_mode);
} catch (PDOException $e) {
//log the error...give some message
}
return $result;
}
invece di avvolgere ogni chiamata nella classe del database:
try {
$this->db->fetchAll($sql,[$var1,$var2]);
} (catch PDOException $e) {
//log the error...give some message
}
Tuttavia, il mio sentimento (senza essere in grado di fare un esempio concreto ...) è che anche se sarebbe più un lavoro per avvolgere ogni chiamata alla classe del database, se faccio codice duro il blocco try-catch nella mia classe di database, non sarà così flessibile in termini di errori di gestione.
Oppure, sarebbe meglio avere un "catch-all" nel mio index.php (io uso MVC) per catturare le eccezioni generali (per esempio, relative al PDO), e poi se I bisogno di più specifici nella mia applicazione (ad esempio, quelli lanciati quando ci si connette a servizi di terze parti), quindi aggiungere ulteriori catch try-block per loro:
Nel mio index.php, che tutte le richieste passano attraverso il mio file .htaccess:
try {
$db = new Db();
$db->connect(['host'=>DB_HOST,'dbname'=>DB_NAME,'username'=>DB_USERNAME,'password'=>DB_PASSWORD]);
$bootstrap = new Bootstrap();
$bootstrap->setControllerPath('application/controllers');
$bootstrap->setModelPath('application/models');
$bootstrap->init(); //load the controller/model/classes
} (catch Exception $e) {
//log error
//if ajax request return json_encoded message other redirect to error page
}