Nhận xét của showdev đúng là PDO DSN không cho phép cú pháp host:port.
Nếu CMS của bạn đang xác định DB_HOST nằm ngoài tầm kiểm soát của bạn, bạn không thể sử dụng hằng số đó một cách trực tiếp. Nhưng bạn có thể lấy thông tin ra khỏi nó.
$host_port = preg_replace('/:(\d+)/', ';port=${1}', DB_HOST);
$db = new PDO("mysql:host={$host_port};dbname=".DB_NAME.";charset=utf8",
DB_USER, DB_PW, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));