J'ai écrit un wrapper PDO soigné en classe. J'essaie de comprendre où est le meilleur endroit pour mettre Try/Catch
bloquer? Dans le wrapper de classe PDO ou d'autres fichiers?Essayez Catch Block dans l'emballage PDO Classe?
Par exemple:
public function fetchData($sql, $params = array(), $fetchMode = 'all') {
try {
$this->sth = $this->db->prepare($sql);
if (count($params) > 0)
$this->setBind($params);
$this->sth->execute();
$fetch = ($fetchMode == 'single') ? "fetch" : "fetchAll";
return $this->sth->$fetch();
} catch (PDOException $e) {
return $data['error'] = array(
'status' => 'error',
'message' => $e->getMessage()
);
}
}
Ou dois-je faire comme ça, sans try/catch
bloc:
public function fetchData($sql, $params = array(), $fetchMode = 'all') {
$this->sth = $this->db->prepare($sql);
if (count($params) > 0)
$this->setBind($params);
$this->sth->execute();
$fetch = ($fetchMode == 'single') ? "fetch" : "fetchAll";
return $this->sth->$fetch();
}
Exemple de requête:
try {
$SQL = "SELECT * FROM table";
$result = $db->fetchData($SQL);
print_r($result);
} catch (PDOException $e) {
$data['error'] = array(
'status' => 'error',
'message' => $e->getMessage()
);
}
Mise à jour: Ce qui serait plus efficace? Par exemple, je ne veux pas répéter try/catch block dans toutes les fonctions ou les fichiers .... et je suis toujours capable de retourner différents "fail-message" sur chacun d'entre eux.
L'écho dans votre premier exemple sent un peu drôle, mais si vous avez retourné l'erreur joliment et renommé la fonction 'tryFetchData' je pense que c'est ok. Ou, utilisez la seconde, mais attrapez la PDOException et lancez la vôtre, de cette façon l'appelant n'a pas besoin de connaître PDOException. –
@lc. Oups, fixe le premier exemple. –
Je ne sais pas si c'est ce que vous cherchez, mais pour des choses comme ça, j'ai tendance à avoir un "runQuery" qui retournera vrai/faux (c'est là que les try/catch sont). getResults() "dans $ result, si c'est faux, j'utilise" getError() "pour lire le message d'erreur que j'aurais mis dans le catch. C'est sous l'hypothèse que vous êtes la fonction de base de données est dans une classe. – Zeritor