Je hebt niet al je bindingen hier gebonden
$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 );
Je hebt een binding met de naam :numRows gedeclareerd, maar je bindt er eigenlijk nooit iets aan.
UPDATE 2019:ik krijg hier steeds meer stemmen over en dat deed me denken aan een andere suggestie
Dubbele aanhalingstekens zijn tekenreeksinterpolatie in PHP, dus als je variabelen in een tekenreeks met dubbele aanhalingstekens gaat gebruiken, heeft het geen zin om de concat-operator te gebruiken. Aan de andere kant zijn enkele aanhalingstekens geen tekenreeksinterpolatie, dus als je maar één variabele aan het einde van een tekenreeks hebt, kan dat logisch zijn, of je kunt hem gewoon voor de hele tekenreeks gebruiken.
In feite is hier een micro-operatie beschikbaar, omdat de interpreter er niets om geeft om de string te ontleden op variabelen. De boost is bijna onmerkbaar en volledig te negeren op kleine schaal. In een zeer grote toepassing, met name goede oude legacy-monolieten, kan er echter een merkbare prestatieverbetering zijn als strings op deze manier worden gebruikt. (en IMO, het is sowieso makkelijker te lezen)