Bạn đã không ràng buộc tất cả các ràng buộc của mình ở đây
$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 );
Bạn đã khai báo một ràng buộc được gọi là:numRows nhưng bạn chưa bao giờ thực sự ràng buộc bất cứ thứ gì với nó.
CẬP NHẬT 2019:Tôi tiếp tục nhận được sự tán thành về điều này và điều đó nhắc tôi về một đề xuất khác
Dấu ngoặc kép là phép nội suy chuỗi trong PHP, vì vậy nếu bạn định sử dụng các biến trong chuỗi dấu ngoặc kép, thì việc sử dụng toán tử concat là vô nghĩa. Mặt khác, dấu ngoặc kép không phải là nội suy chuỗi, vì vậy nếu bạn chỉ có một biến giống như một biến ở cuối chuỗi thì nó có thể có ý nghĩa hoặc chỉ sử dụng nó cho cả chuỗi.
Trên thực tế, có một micro op có sẵn ở đây vì trình thông dịch không quan tâm đến việc phân tích chuỗi cho các biến. Sự gia tăng gần như không được chú ý và hoàn toàn có thể bị bỏ qua ở quy mô nhỏ. Tuy nhiên, trong một ứng dụng rất lớn, đặc biệt là các nguyên khối cũ tốt, có thể có sự gia tăng hiệu suất đáng chú ý nếu các chuỗi được sử dụng như thế này. (và IMO, dù sao thì nó cũng dễ đọc hơn)