0

我遇到了这个问题,找不到解决办法,有高手可以帮帮我吗?

public  function getComments($postId,$pageCmt){
        $db = $this->dbConnect();
        $cmtNb=3;
        $r=($pageCmt-1)*3;

        $req = $db->prepare('SELECT id, comments FROM comments WHERE post_id = ? ORDER BY ind_date DESC,date_comments DESC LIMIT ? OFFSET ?' );

        $req->bindParam(1,$postId,\PDO::PARAM_INT);         
        $req->bindParam(2,$cmtNb,\PDO::PARAM_INT );                 
        $req->bindParam(3,$r,\PDO::PARAM_INT);

         $req->execute(array($postId,$cmtNb,$r));

         return $req;
      }

似乎问题来自LIMIT之后的参数,因为如果我取消“LIMIT?OFFSET?” 代码可以与第一个参数 $postId 一起使用,将获取评论,

但是,如果我添加带有“限制?偏移?”的代码。在页面上不会获取任何评论,但也没有显示错误,

任何想法?。

谢谢。

4

2 回答 2

0

在这种情况下,您可以尝试将值直接连接到查询中,因为该值不能被用户欺骗,这些值是在服务器端设置的。

此外,您不需要使用bindParam()AND 将值传递给execute().

您的代码可以修改为

$req = $db->prepare('SELECT id, comments FROM comments WHERE post_id = ? ORDER BY ind_date DESC,date_comments DESC LIMIT {$cmtNb} OFFSET {$r}' );
$req->execute(array($postId));

如果您需要使用用户为LIMITor指定的值OFFSET,则需要在服务器端验证该值是否应该在运行查询之前被接受。

于 2020-05-04T15:27:23.727 回答
0

我今天得到了解决方案:

通过仍然使用“限制?偏移?” 接着:

      $req->bindValue(1,$postId,\PDO::PARAM_INT);          
      $req->bindValue(2,$cmtNb,\PDO::PARAM_INT );               
      $req->bindValue(3,$r,\PDO::PARAM_INT);
      var_dump($r);

      $req->execute(); 

今天完美运行!谢谢你们。

于 2020-05-05T13:38:36.697 回答