문제점 : SQL 쿼리에 대해 더 배우고 있는데이 함수와 쿼리가 26 및 25의 user_id를 가진 상태 만 반환하지만 27에서 아무것도 반환하지 않는 이유를 이해하려고합니다. 또는 31.SQL 쿼리가 올바른 값을 반환하지 않음
질문 : 사용자 27 또는 31의 상태가 반환되지 않는 이유는 무엇입니까?
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) && user_id IS NOT NULL) OR user_id = :auth_id OR (group_id IN (:group_array) && group_id IS NOT NULL && group_id != 0) ORDER BY updated_at DESC LIMIT :offset, :limit");
$stmt->bindParam(':auth_id', $user_id);
$stmt->bindParam(':group_array', $group_array);
$stmt->bindParam(':friend_array', $friend_array);
$stmt->bindParam(':offset', $start, PDO::PARAM_INT);
$stmt->bindParam(':limit', $per_page, PDO::PARAM_INT);
$stmt->execute();
if ($stmt->rowCount() > 0) {
while($row = $stmt->fetchAll()) {
return $row;
}
}
}
내가 ($의 group_array) 내가 51을 얻고, 인 print_r ($ friend_array를) print_r의 경우 25을 가져옵니다 (I 사용자 (27) 및 (31)가 반환하는 상태가 있음을 확인했다) 여기
아래의 코드는 , 27,31.SELECT * FROM statuses WHERE (user_id IN (25,27,31) && user_id IS NOT NULL) OR user_id = 26 OR (group_id IN ('51,') && group_id IS NOT NULL && group_id != 0) ORDER BY updated_at DESC LIMIT 0, 10
이것은 잘 작동 : 나는 단지 친구 어레이 (25)의 첫 번째 사용자의 상태를 받고
27 및 31을 무시하는 것을 볼 수있는에서 나는 사용하여이 내부에 phpMyAdmin을 테스트했다. 어떤 도움이라도 대단히 감사하겠습니다.
지금은 감사합니다. 더 중요한 것은 왜 작동하지 않았는지 이해합니다. 배열 및 바인딩 문제에 대한 귀하의 설명은 많은 도움이되었습니다. – Niall
내가 도와 줘서 다행이다 :) – nospor