«bindParam» с несколькими параметрами после «Limit» не может работать в php? - PullRequest
0 голосов
/ 04 мая 2020

Я столкнулся с этой проблемой и не могу найти решение. Может ли какой-нибудь эксперт помочь мне здесь?

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" ? СМЕЩЕНИЕ? " коды могут работать с первым параметром $ postId, комментарии будут извлечены,

Но если я добавлю коды с "LIMIT? OFFSET?" на странице не будет получено ни одного комментария, но не будет отображено ни одной ошибки,

Есть идеи?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Я получил решение сегодня:

Используя еще «LIMIT? OFFSET?» а затем:

      $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(); 

Сегодня все работает отлично, спасибо вам, ребята.

0 голосов
/ 04 мая 2020

В этом случае вы можете попытаться объединить значения в запросе напрямую, поскольку значение не может быть подделано пользователем, значения задаются на стороне сервера.

Кроме того, вам не нужно используйте bindParam() И передайте значения 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));

Если вам когда-либо понадобится использовать значение, указанное пользователем для LIMIT или OFFSET, вам нужно проверить на стороне сервера, должно ли это значение быть принято перед выполнением запроса.

...