Non hai legato tutti i tuoi attacchi qui
$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 );
Hai dichiarato un'associazione chiamata :numRows ma in realtà non le colleghi mai nulla.
AGGIORNAMENTO 2019:continuo a ricevere voti su questo e quello mi ha ricordato un altro suggerimento
Le virgolette doppie sono interpolazioni di stringhe in PHP, quindi se hai intenzione di utilizzare variabili in una stringa di virgolette doppie, è inutile usare l'operatore concat. D'altra parte, le virgolette singole non sono interpolazioni di stringhe, quindi se hai solo una variabile alla fine di una stringa può avere senso, o usarla semplicemente per l'intera stringa.
In effetti, qui è disponibile una micro operazione poiché all'interprete non interessa analizzare la stringa per le variabili. La spinta è quasi impercettibile e totalmente ignorabile su piccola scala. Tuttavia, in un'applicazione molto grande, in particolare i buoni vecchi monoliti legacy, può esserci un notevole aumento delle prestazioni se le stringhe vengono utilizzate in questo modo. (e IMO, è comunque più facile da leggere)