Du har ikke bundet alle dine bindinger her
$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 );
Du har erklæret en binding kaldet :numRows, men du binder faktisk aldrig noget til den.
OPDATERING 2019:Jeg bliver ved med at få opstemmer om dette, og det mindede mig om et andet forslag
Dobbelte anførselstegn er strenginterpolation i PHP, så hvis du skal bruge variabler i en streng med dobbelte anførselstegn, er det meningsløst at bruge concat-operatoren. På bagsiden er enkelte anførselstegn ikke strenginterpolation, så hvis du kun har en variabel i slutningen af en streng, kan det give mening, eller bare bruge det til hele strengen.
Faktisk er der en mikrooperation tilgængelig her, da fortolkeren er ligeglad med at analysere strengen for variabler. Boosten er næsten umærkelig og fuldstændig ignorerbar i lille skala. Men i en meget stor applikation, især gode gamle legacy monolitter, kan der være en mærkbar ydelsesforøgelse, hvis strenge bruges som denne. (og IMO, det er lettere at læse alligevel)