Ну вот ребят, почему вы пишете в заголовке один вопрос, про который сразу думаешь - а он гуглил вообще, ну вот хотя бы свой заголовок вопроса?, а в тексте - совсем другой, который к заголовку вообще, ну вообще никакого отношения не имеет?
Чтобы пдо не палил пароль в стеке вызовов, надо сделать две вещи:
1. Надо аккуратно поймать ошибку соединения,
и тут же бросить новое исключение с текстом ошибки. Таким образом мы не потеряем ошибку но уберем из нее стек.
2. Если соединение производится внутри функции, то параметры соединения надо передавать не напрямую в параметрах функции, а либо в виде массива, либо вообще не передавать, а получать внутри функции
Чтобы
РНР не палил текст ошибок на экран - про что на самом деле у тебя вопрос - надо РНР сказать, чтобы не палил текст ошибок на экран. Для этого специальная настройка есть тебе про неё в комментариях написали.
Как видим, все проблемы - от неумения формулировать вопросы. Потому что если вопрос нормально сфорумлировать, то ответ тут же становится очевиден