Tôi đang nghĩ đến việc sử dụng PDO trong tất cả ứng dụng web trong tương lai của mình. Hiện nay (sử dụng những gì tôi đã học được từ SO cho đến nay), những gì tôi có trong trang web của tôi để xử lý kết nối cơ sở dữ liệu là một lớp Singleton như thế này:PDO try-catch usage trong các hàm
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;
}
}
và một tập tin (functions.php) với nội dung cụ thể các chức năng trông giống hệt như sau:
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";
}
}
...
có nghĩa là tôi phải lặp lại phần try .. catch
trong tất cả các chức năng.
Câu hỏi của tôi là:
- Làm thế nào tôi nên làm mà hiệu quả hơn? (ví dụ: không phải lặp lại
try..catch
trong tất cả các chức năng, nhưng vẫn có thể trả về "thông báo lỗi" khác nhau trên mỗi chức năng) - Đây có phải là thực tiễn tốt không? Tôi vẫn còn mới ở PDO và OOP (vẫn còn rất nhiều thứ để học), vì vậy (tính đến bây giờ), tôi không thể thực sự thấy bất kỳ bất lợi hoặc những thứ có thể được cải thiện trong đó.
Tôi xin lỗi nếu điều đó có vẻ không rõ ràng hoặc quá dài. Cảm ơn trước.
Thứ hai những gì pd nói, việc sử dụng lớp lỗi tùy chỉnh của tôi chỉ đơn giản là ghi lại lỗi cho db và gửi cho tôi một email. Người dùng cuối không bao giờ thấy dấu vết ngăn xếp hoặc sự không thân thiện khác. Đó là lý do tại sao nếu có lỗi tôi trả về false và sau đó kiểm tra giá trị trả về của truy vấn để xác định điều gì sẽ cho người dùng biết –
Nếu bạn thay đổi SELECT và/hoặc truy vấn khác đã thay đổi cơ sở dữ liệu để SELECT không hoạt động nữa: Bạn chưa bao giờ biết về điều đó cho đến khi bạn tự mình kiểm tra trang của mình. Điều này phản tác dụng. try/catch là cần thiết cho mọi truy vấn! – mgutt