На мой взгляд, нюансы такие:
1. Вместо bindParam лучше bindValue с теми же аргументами пользовать;
2. С die на проде поаккуратнее; лучше инфу об ошибках в отдельный лог писать.
3. Хорошим тоном является после окончания всех fetch-ей на датасете вызывать closeCursor().
4. Выборку * в sql-запросе полезно заменить на конкретный необходимый в работе набор полей: при их большом количестве можно поиметь дополнительных проблем.