Czasami twój kod PDO generuje błąd, taki jak Call to a member function execute()
lub podobne. Lub nawet bez błędu, ale zapytanie nie działa tak samo. Oznacza to, że Twoje zapytanie nie zostało wykonane.
Za każdym razem, gdy zapytanie się nie powiedzie, MySQL wyświetla komunikat o błędzie, który wyjaśnia przyczynę . Niestety domyślnie takie błędy nie są przenoszone do PHP, a jedyne co masz to cisza lub tajemniczy komunikat o błędzie wspomniany powyżej. Dlatego bardzo ważne jest, aby skonfigurować PHP i PDO, aby zgłaszały błędy MySQL. A gdy pojawi się komunikat o błędzie, naprawienie problemu będzie łatwe.
Aby uzyskać szczegółowe informacje o problemie, umieść następujący wiersz w swoim kodzie zaraz po połączeniu
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
(gdzie $dbh
jest nazwą zmiennej instancji PDO) lub - lepiej - dodaj ten parametr jako opcję połączenia . Następnie wszystkie błędy bazy danych zostaną przetłumaczone na wyjątki PDO, które pozostawione same sobie będą działać jak zwykłe błędy PHP.
Istnieje bardzo mała szansa, że w przypadku jakiegoś konkretnego błędu nie zostanie zgłoszony wyjątek. Jeśli twoje query()
/prepare()
lub execute()
wywołanie zwraca false
ale nie ma wyjątków, sprawdź PDO::errorInfo()
w ten sposób,
trigger_error("PDO errorInfo: ".$dbh->errorInfo());
Po otrzymaniu komunikatu o błędzie musisz go przeczytać i zrozumieć. Brzmi to zbyt oczywiste, ale uczniowie często pomijają znaczenie komunikatu o błędzie. Jednak w większości przypadków wyjaśnia problem całkiem prosto:
- Powiedz, że jeśli mówi, że dana tabela nie istnieje, musisz sprawdzić pisownię, literówki i wielkość liter. Musisz także upewnić się, że twój skrypt PHP łączy się z prawidłową bazą danych
- Lub, jeśli mówi, że wystąpił błąd w składni SQL, musisz sprawdzić swój SQL. A problem jest tuż przed część zapytania przytoczona w komunikacie o błędzie.
Musisz także zaufać komunikat o błędzie. Jeśli mówi, że liczba tokenów nie odpowiada liczbie powiązanych zmiennych, to jest więc. To samo dotyczy nieobecnych tabel lub kolumn. Mając wybór, czy to twój własny błąd, czy komunikat o błędzie jest błędny, zawsze trzymaj się pierwszego. Znowu brzmi to protekcjonalnie, ale setki pytań na tej stronie dowodzą, że ta rada jest niezwykle przydatna.
Zauważ, że aby zobaczyć błędy PDO, musisz ogólnie widzieć błędy PHP. Aby to zrobić, musisz skonfigurować PHP w zależności od środowiska witryny:
-
na rozwoju serwer bardzo przydatne jest posiadanie błędów bezpośrednio na ekranie, dla których wyświetlanie błędów musi być włączone:
error_reporting(E_ALL); ini_set('display_errors',1);
-
podczas na żywo witryny, wszystkie błędy muszą być zarejestrowane, ale nigdy nie pokazywane do klienta. W tym celu skonfiguruj PHP w ten sposób:
error_reporting(E_ALL); ini_set('display_errors', 0); ini_set('log_errors', 1);
Zauważ, że error_reporting
powinna być ustawiona na E_ALL
cały czas.
Należy również pamiętać, że pomimo powszechnego złudzenia do zgłaszania błędów nie trzeba używać żadnego try-catch . PHP zgłosi Ci błędy PDO już i to w lepszej formie. Nieprzechwycony wyjątek jest bardzo dobry do programowania, ale jeśli chcesz wyświetlić dostosowaną stronę błędu, nadal nie używaj do tego try catch, ale po prostu ustaw niestandardowy program obsługi błędów . Krótko mówiąc, nie musisz traktować błędów PDO jako czegoś specjalnego, ale traktować je jak każdy inny błąd w kodzie.
PS
Czasami nie ma błędu, ale też nie ma wyników. Oznacza to, że nie ma danych spełniających Twoje kryteria . Musisz więc przyznać się do tego faktu, nawet jeśli możesz przysiąc, że dane i kryteria są w porządku. Oni nie są. Musisz je ponownie sprawdzić. Mam krótką odpowiedź, która pomoże ci określić problem z dopasowaniem, Masz problem z pasującymi wierszami w bazie danych za pomocą PDO
. Po prostu postępuj zgodnie z tą instrukcją i połączonym samouczkiem krok po kroku i albo rozwiąż swój problem, albo zadaj pytanie dotyczące Stack Overflow.