私は、PDOのstartおよびper_pageにbindParam()を使用すると動作しないというクエリを持っています。しかし、これらをクエリ2のように直接追加するとうまくいきます。LIMITを使用してこのクエリがなぜ他のクエリが使用されていない場合に機能するのか説明できますか?
- なぜ、bindParam()は、クエリ1では次のように動作しません:startと:per_page?
これらの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をよりよく理解しようとしています。
へ
私は再び質問を読んで、これはページで重複していないと思いますが、この:[結合することなくPDOでクエリを実行する](HTTP: //stackoverflow.com/a/23281851/5816907)。 – Chay22