Początkowo unikałem włączania logowania do monitorowania PDO, ponieważ myślałem, że będzie to kłopot, ale nie jest wcale trudne. Nie trzeba ponownie uruchomić MySQL 5.1.9 (po):
Wykonaj ten SQL w phpMyAdmin lub innym środowisku, gdzie może masz wysokie db przywileje:
SET GLOBAL general_log = 'ON';
w terminalu, ogon swój dziennik plik. Kopalnia była tutaj:
>sudo tail -f /usr/local/mysql/data/myMacComputerName.log
Możesz wyszukać swoje mysql plików z tego terminalu komendę:
>ps auxww|grep [m]ysqld
stwierdziliśmy, że PDO ucieka wszystko, więc nie można napisać
$dynamicField = 'userName';
$sql = "SELECT * FROM `example` WHERE `:field` = :value";
$this->statement = $this->db->prepare($sql);
$this->statement->bindValue(':field', $dynamicField);
$this->statement->bindValue(':value', 'mick');
$this->statement->execute();
Ponieważ tworzy:
SELECT * FROM `example` WHERE `'userName'` = 'mick' ;
Co nie spowodowało błędu, tylko pusty wynik. Zamiast tego potrzebne do korzystania
$sql = "SELECT * FROM `example` WHERE `$dynamicField` = :value";
dostać
SELECT * FROM `example` WHERE `userName` = 'mick' ;
Po zakończeniu wykonywania:
SET GLOBAL general_log = 'OFF';
albo dzienniki dostanie ogromne.
Naprawdę szkoda, że nie było sposobu, aby to zrobić. Przez jakiś czas mnie to dręczyło. –
Dla PHP> = 5.1, spójrz na http://www.php.net/manual/en/pdostatement.debugdumpparams.php – Mawg
Istnieje błąd w 'debugDumpParams()' - żadne wartości nie są zawarte w ouput.Jedynym sposobem (łatwego) sprawdzenia zapytań wykonywanych przez 'mysql' jest tymczasowe włączenie logu w my.cnf (h/t do @JB Hurteaux) –