2012-08-05 10 views
5

Wprowadzam zmiany z mysql_* wywołań do wywołań PDO i nie jestem w stanie dowiedzieć się, jak debugować mój aktualny kod SQL podczas tworzenia nowego kodu.Debugowanie zapytań przygotowanych przez PDO za pomocą MySQL

Pod numerami mysql_* mógłbym napisać trochę kodu SQL w funkcji PHP i mógłbym echo uzyskać rzeczywisty kod SQL, aby zobaczyć, z czym pracował procesor.

Nie mogłem znaleźć takiego beastie w bibliotece PDO. debugDumpParams wygląda tak, jak powinien, ale nie odrzuca powiązanej instrukcji.

Przykłady problemów, jakie napotkał:

  1. W mojej pierwszej próbie byłem wiązania ciąg i była w tym cytaty w SQL, pomimo wiązania z data_type sznurka - to był tylko przez fluke Próbowałem usunąć cytaty z wyciągu; debugowanie pozwoliłoby mi zauważyć, że tam był powtarzany cytat.

  2. Skopiowałem kod z jednego projektu do drugiego i przypadkowo zapomniałem poprawić nazwę bazy danych. Oczywiście SQL nie powiodło się, ponieważ tabele nie istniały w innym DB. Ale program właśnie zwrócił poprawny fałszywy wynik. Nigdzie w dziennikach PHP ani w dziennikach MySQL ani w żadnym miejscu nie dostałem podpowiedzi, że tabela nie istnieje tam, gdzie jej szukałem.

A zatem, jak inne osoby przeprowadzają debugowanie wywołań SQL PDO? czego mi brakuje? :)

+0

Umm, z jakiegoś powodu edytor usunął mój drugi przykład: 2. Skopiowałem kod z jednego projektu do drugiego i przypadkowo zapomniałem poprawić nazwę bazy danych. Oczywiście sql nie powiodło się, ponieważ tabele nie istniały w innym db. Ale program właśnie zwrócił poprawny fałszywy wynik. Nigdzie w dziennikach php lub dziennikach mysql ani nigdzie nie znalazłem wskazówki, że tabela nie istnieje tam, gdzie jej szukałem. –

+1

Witamy w Stackoverflow! –

+0

@LeadeGroot, Naprawiono formatowanie. Umieszcza swój pierwszy element na tej samej linii, co "Przykłady problemów ...", dzięki czemu drugi element jest pierwszy na liście uporządkowanej numerycznie. Dziwne. – Brad

Odpowiedz

4

Dla pierwszego problemu sprawdzanie zapytania jest rzeczywiście trudne. Nie można wiele z tym zrobić, z wyjątkiem rejestrowania zapytań na serwerze bazy danych. Powodem jest to, że przygotowane zapytania nie są (zawsze) po prostu łączeniem danych w zapytanie. Chodzi o to, że dane są wysyłane oddzielnie od zapytania. Dostęp do ciągu zapytania można uzyskać przez $yourStatement->queryString. Wyświetli tylko zapytanie z parametrami.

W przypadku drugiego problemu domyślnie PDO nie generuje wyjątku w przypadku wystąpienia błędu. To od Ciebie zależy, czy je sprawdzisz. Możesz to zmienić. http://php.net/manual/en/pdo.error-handling.php

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Następnie można złapać problemy przez blok try/catch wokół wykonania zapytania.

+0

Dziękuję, tak, ustawienie obsługi błędów w ten sposób umieszcza komunikaty o błędach w dziennikach - doskonałe! –

Powiązane problemy