Zakładam, że masz na myśli to, że chcesz uzyskać ostateczne zapytanie SQL, z interpolowanymi wartościami parametrów. Rozumiem, że przydałoby się to przy debugowaniu, ale tak nie działają przygotowane instrukcje. Parametry nie są łączone z przygotowaną instrukcją po stronie klienta, więc PDO nigdy nie powinno mieć dostępu do ciągu zapytania połączonego z jego parametrami.
Instrukcja SQL jest wysyłana do serwera bazy danych, gdy wykonujesz przygotowanie(), a parametry są wysyłane osobno, gdy wykonujesz execute(). Ogólny dziennik zapytań MySQL pokazuje końcowy kod SQL z wartościami interpolowanymi po wykonaniu funkcji(). Poniżej znajduje się fragment mojego ogólnego dziennika zapytań. Uruchomiłem zapytania z mysql CLI, a nie z PDO, ale zasada jest taka sama.
081016 16:51:28 2 Query prepare s1 from 'select * from foo where i = ?'
2 Prepare [2] select * from foo where i = ?
081016 16:51:39 2 Query set @a =1
081016 16:51:47 2 Query execute s1 using @a
2 Execute [2] select * from foo where i = 1
Możesz również uzyskać to, czego chcesz, ustawiając atrybut PDO PDO::ATTR_EMULATE_PREPARES. W tym trybie PDO interpoluje parametry do zapytania SQL i wysyła całe zapytanie podczas wykonywania(). To nie jest naprawdę przygotowane zapytanie. Ominiesz korzyści płynące z przygotowanych zapytań, interpolując zmienne do ciągu SQL przed wykonaniem().
Ponownie komentarz od @afiliny:
Nie, tekstowe zapytanie SQL nie w połączeniu z parametrami podczas wykonywania. Tak więc PDO nie ma nic do pokazania.
Wewnętrznie, jeśli używasz PDO::ATTR_EMULATE_PREPARES, PDO tworzy kopię zapytania SQL i interpoluje do niego wartości parametrów przed wykonaniem przygotowania i wykonania. Ale PDO nie ujawnia tego zmodyfikowanego zapytania SQL.
Obiekt PDOStatement ma właściwość $queryString, ale jest ona ustawiana tylko w konstruktorze dla PDOStatement i nie jest aktualizowana, gdy zapytanie jest przepisywane z parametrami.
Rozsądną prośba o funkcję dla PDO byłaby poproszenie ich o ujawnienie przepisanego zapytania. Ale nawet to nie dałoby "kompletnego" zapytania, chyba że użyjesz PDO::ATTR_EMULATE_PREPARES.
Dlatego przedstawiam powyższe obejście polegające na użyciu ogólnego dziennika zapytań serwera MySQL, ponieważ w tym przypadku nawet przygotowane zapytanie z symbolami zastępczymi parametrów jest przepisywane na serwerze, a wartości parametrów są uzupełniane w ciągu zapytania. Ale odbywa się to tylko podczas logowania, a nie podczas wykonywania zapytania.