Nie związałeś tutaj wszystkich wiązań
$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 );
Zadeklarowałeś powiązanie o nazwie :numRows, ale tak naprawdę nigdy niczego z nim nie wiążesz.
AKTUALIZACJA 2019:Ciągle otrzymuję głosy za tym i to przypomniało mi inną sugestię
Podwójne cudzysłowy to interpolacja łańcuchów w PHP, więc jeśli zamierzasz używać zmiennych w podwójnych cudzysłowach, nie ma sensu używać operatora concat. Z drugiej strony pojedyncze cudzysłowy nie są interpolacją ciągów, więc jeśli masz tylko jedną zmienną na końcu ciągu, może to mieć sens lub po prostu użyć jej dla całego ciągu.
W rzeczywistości dostępna jest tutaj mikro operacja, ponieważ interpreter nie dba o analizowanie łańcucha pod kątem zmiennych. Przyspieszenie jest prawie niezauważalne i całkowicie zignorowane na małą skalę. Jednak w bardzo dużych aplikacjach, zwłaszcza starych dobrych monolitach, może wystąpić zauważalny wzrost wydajności, jeśli ciągi są używane w ten sposób. (i IMO i tak jest łatwiej czytać)