Estoy pensando en usar PDO en todas mis aplicaciones web futuras. En la actualidad (con lo que he aprendido de SO hasta ahora), lo que tengo en mi sitio para manejar la conexión de base de datos es una clase Singleton así:PDO try-catch uso en las funciones
class DB {
private static $instance = NULL;
private static $dsn = "mysql:host=localhost;dbname=mydatabase;";
private static $db_user = 'root';
private static $db_pass = '0O0ooIl1';
private function __construct()
{
}
private function __clone()
{
}
public static function getInstance() {
if (!self::$instance)
{
self::$instance = new PDO(self::$dsn, self::$db_user, self::$db_pass);
self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$instance;
}
}
y otro archivo (functions.php) con un contenido específico funciones se ve exactamente como éste:
function get_recent_activities()
{
try
{
$db = DB::getInstance();
// --prepare and execute query here, fetch the result--
return $my_list_of_recent_activities;
}
catch (PDOException $e)
{
return "some fail-messages";
}
}
...
lo que significa que tengo que repetir la parte try .. catch
en todas las funciones.
Mis preguntas son:
- ¿Cómo debería hacer más eficiente que? (por ejemplo, no tener que repetir
try..catch
en todas las funciones, y aún así poder devolver diferentes "mensajes de error" en cada uno) - ¿Es esto una buena práctica? Todavía soy nuevo en PDO y OOP (aún hay mucho más por aprender), así que (a partir de ahora), no puedo ver ninguna desventaja o cosas que se puedan mejorar allí.
Lo siento si eso no parece claro o demasiado largo. Gracias por adelantado.
Para aclarar lo que pd dice, mi uso de la clase de error personalizada simplemente registra el error en el archivo db y me envía un correo electrónico. El usuario final nunca ve un rastro de pila u otra hostilidad. Es por eso que si hay un error, devuelvo falso y luego pruebo el valor de retorno de mi consulta para determinar qué decirle al usuario –
Si cambia el SELECTO y/o otra consulta cambió la base de datos para que SELECCIONE ya no funcione: nunca saber de eso hasta que pruebe su página por su cuenta. Esto es contraproducente try/catch es necesario para cada consulta! – mgutt