Você não ligou todas as suas ligações aqui
$sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM comments WHERE articleid = :art
ORDER BY " . mysqli_escape_string($order) . " LIMIT :numRows";
$st = $conn->prepare( $sql );
$st->bindValue( ":art", $art, PDO::PARAM_INT );
Você declarou uma vinculação chamada :numRows, mas nunca vincula nada a ela.
ATUALIZAÇÃO 2019:continuo recebendo votos positivos sobre isso e isso me lembrou de outra sugestão
Aspas duplas são interpolação de strings em PHP, então se você for usar variáveis em uma string de aspas duplas, não faz sentido usar o operador concat. Por outro lado, aspas simples não são interpolação de strings, portanto, se você tiver apenas uma variável no final de uma string, pode fazer sentido ou apenas usá-la para a string inteira.
Na verdade, há um micro op disponível aqui, pois o interpretador não se preocupa em analisar a string em busca de variáveis. O impulso é quase imperceptível e totalmente ignorável em pequena escala. No entanto, em um aplicativo muito grande, especialmente bons monólitos antigos, pode haver um aumento notável no desempenho se as strings forem usadas assim. (e IMO, é mais fácil de ler de qualquer maneira)