2016-05-26 11 views
0

私は、PDOのstartおよびper_pageにbindParam()を使用すると動作しないというクエリを持っています。しかし、これらをクエリ2のように直接追加するとうまくいきます。LIMITを使用してこのクエリがなぜ他のクエリが使用されていない場合に機能するのか説明できますか?

  1. なぜ、bindParam()は、クエリ1では次のように動作しません:startと:per_page?
  2. これらのstartおよびper_pageの値は、ユーザーによって入力されません。それらは他の場所から取得されるので、bindParam()を使用する必要がありますか?

    public function t_status($friends, $groups, $user_id, $start, $per_page, $db){ 
    
    $group_array = implode(',', $groups); 
    $friend_array = implode(',', $friends); 
    
    $stmt = $db->prepare("SELECT * FROM statuses WHERE user_id IN (:friend_array) OR user_id = :auth_id OR group_id IN (:group_array) ORDER BY updated_at LIMIT $start, $per_page"); 
    $stmt->bindParam(':auth_id', $user_id); 
    $stmt->bindParam(':group_array', $group_array); 
    $stmt->bindParam(':friend_array', $friend_array); 
    
    $stmt->execute(); 
    if ($stmt->rowCount() > 0) { 
        while($row = $stmt->fetchAll()) { 
         return $row; 
        } 
    } 
    

    }

クエリ2:

public function t_status($friends, $groups, $user_id, $start, $per_page, $db){ 

    $group_array = implode(',', $groups); 
    $friend_array = implode(',', $friends); 

    $stmt = $db->prepare("SELECT * FROM statuses WHERE user_id IN (:friend_array) OR user_id = :auth_id OR group_id IN (:group_array) ORDER BY updated_at LIMIT :start, :per_page"); 
    $stmt->bindParam(':auth_id', $user_id); 
    $stmt->bindParam(':group_array', $group_array); 
    $stmt->bindParam(':friend_array', $friend_array); 
    $stmt->bindParam(':start', $start); 
    $stmt->bindParam(':per_page', $per_page); 

    $stmt->execute(); 
    if ($stmt->rowCount() > 0) { 
     while($row = $stmt->fetchAll()) { 
      return $row; 
     } 
    } 
} 

これは単純な質問であれば謝罪。私はPDOを学んでおり、私はPDOをよりよく理解しようとしています。

+1

$stmt->bindParam(':start', $start); $stmt->bindParam(':per_page', $per_page); 

私は再び質問を読んで、これはページで重複していないと思いますが、この:[結合することなくPDOでクエリを実行する](HTTP: //stackoverflow.com/a/23281851/5816907)。 – Chay22

答えて

2

変更:

$stmt->bindParam(':offset', $start, PDO::PARAM_INT); 
$stmt->bindParam(':limit', $per_page, PDO::PARAM_INT); 
+0

これは完璧に動作します。私はできるだけ数分でそれを受け入れます。私はちょうどPDO :: PARAM_INTといくつかの詳細を読んでいます。私はPDOのbindParam()の中にこれらのうちの1つを必ず含めるべきですか?ありがとうございました。 – Niall

+1

クールな問題はありません。理想的には、ページの制限とオフセットが整数なので、渡すべきです。 –

関連する問題