簡體   English   中英

“Limit”后多參數的“bindParam”不能在php中工作?

[英]“bindParam” with multi-parameters after “Limit” couldn't work in php?

我遇到了這個問題,找不到解決辦法,有高手可以幫幫我嗎?

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 一起使用,將獲取評論,

但是,如果我添加帶有“LIMIT?OFFSET?”的代碼。 在頁面上不會獲取任何評論,但也沒有顯示錯誤,

任何想法?。

謝謝。

在這種情況下,您可以嘗試將值直接連接到查詢中,因為該值不能被用戶欺騙,這些值是在服務器端設置的。

此外,您不需要使用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));

如果您需要使用用戶為LIMITOFFSET指定的值,則需要在運行查詢之前在服務器端驗證該值是否應該被接受。

我今天得到了解決方案:

通過仍然使用“ 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(); 

它今天完美運行,。 謝謝你們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM