2011-12-29 8 views
14

Kiedy po raz pierwszy rozpoczął naukę PHP błędu, chciałbym napisać oświadczenia zapytań podobny do tego tutaj:PHP: Nowoczesna wersja "or die();" za obsługę

mysql_query("SELECT * FROM `table`") or die(mysql_error()); 

Jaki jest najlepszy, współczesny sposób, aby osiągnąć ten sam efekt jak wyżej?

W moim rozumieniu, w dzisiejszym świecie z klasami, funkcjami i ogólnym OOP, uruchamianie w ten sposób wielu zapytań jest bardzo nieefektywne. Co powinniśmy robić inaczej?

+0

Uhm, czy chcesz coś innego niż "albo umrzeć" lub używać OOP w ogóle? Jeśli pierwsza, zmień tytuł! jeśli to drugie, możesz zacząć od czegoś tak "niskiego" jak mysqli lub przejść do pełnego ORM jak Doctrine i Propel przechodząc przez PDO –

+0

Sprawdź za pomocą PDO. Jest zorientowany obiektowo i można go skonfigurować tak, aby zgłaszał wyjątki w przypadku obsługi błędów (w rzeczywistości domyślnie). –

+0

wyjątki ....? –

Odpowiedz

19

Powinieneś używać PDO, który rzuci wyjątki, które mogą zostać przechwycone - lub jeśli nie zostaną złapane, zabiją skrypt tak samo jak die().

$db = new \PDO(
    'mysql:dbname=database;host=localhost', 
    'root', 
    '', 
    array(
     \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
     \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, 
     \PDO::ATTR_ERRMODE   => \PDO::ERRMODE_EXCEPTION 
    ) 
); 

$db->query('SELECT INVALID FOO'); // Exception!!! 

this_never_gets_run(); 
+3

+1 dla PDO! PDO jest w każdym razie bezpieczniejsze i bardziej użyteczne. – Cyclone

+2

@Cyclone PDO nie jest z natury bezpieczniejszy. Jeśli nie korzystasz z przygotowanych instrukcji nic nie zyskasz, przechodząc na PDO. To nie jest PDO === bezpieczne. Wciąż zależy od tego, w jaki sposób tworzysz swoje zapytania. – Gordon

+0

@Gordon, podczas gdy możesz uszkodzić swoją aplikację za pomocą albo - Myślę, że możesz udowodnić, że jest więcej sposobów na zranienie siebie i łatwiej się zranić, nie używając PDO. – Xeoncross