2017-09-19 2 views
-1

내 쿼리에 문제가 발생하고, 내가없는 결과를 분류하는 노력 지난 2 일을 보내고 있었다, 그래서 나는 한 (마지막 제외)를 두 번 모든 개체를 검색하는 내가 여기서 물을 수 있다고 생각했다. 미리 감사드립니다.내 요청은 데이터를 가져 오는 중 오류입니다 두 번

PS : 나는 데이터가 두 번 검색됩니다 phpMyAdmin에 그것을 실행하면

내가 진행을했습니다

, 오류가 쿼리에서 비롯됩니다.

$token = *** 

$userid = *** 

$followingposts = $db->query(' 
    SELECT 
     personal_posts.id, 
     personal_posts.body, 
     personal_posts.posted_at, 
     personal_posts.postimg, 
     personal_posts.likes, 
     users.`username` 
    FROM users, personal_posts, followers 
    WHERE (
     personal_posts.user_id = followers.user_id 
     OR personal_posts.user_id = :userid 
    ) 
    AND users.id = personal_posts.user_id 
    AND follower_id = :userid 
    ORDER BY personal_posts.posted_at DESC; 
    ', array(':userid'=>$userid), array(':userid'=>$userid)); 
$response = "["; 
foreach($followingposts as $post) { 
    $response .= "{"; 
    $response .= '"PostId": '.$post['id'].','; 
    $response .= '"PostBody": "'.$post['body'].'",'; 
    $response .= '"PostedBy": "'.$post['username'].'",'; 
    $response .= '"PostedAt": "'.$post['posted_at'].'",'; 
    $response .= '"PostImage": "'.$post['postimg'].'",'; 
    $response .= '"Likes": '.$post['likes'].''; 
    $response .= "},"; 
} 
$response = substr($response, 0, strlen($response)-1); 
$response .= "]"; 
http_response_code(200); 
echo $response; 

    class DB { 
     private $pdo; 
     public function __construct() { 
       $pdo = new PDO('****'); 
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       $this->pdo = $pdo; 
     } 
     public function query($query, $params = array()) { 
       $statement = $this->pdo->prepare($query); 
       $statement->execute($params); 
       if (explode(' ', $query)[0] == 'SELECT') { 
       $data = $statement->fetchAll(PDO::FETCH_ASSOC); 
       return $data; 
       } 
     } 
} 
+6

이 ** 자신의 JSON 롤 절대로 정확한 대체합니다. ['json_encode()'] (http://php.net/manual/function.json-encode.php) – Phil

+1

'$ db-> query()'에 대한 인수가 잘못되었습니다. 두 번째 인수는 'array (': userid'=> $ userid)'. –

+0

어떤 드라이버를 사용하고 있습니까? – chris85

답변

0

(그래서 누군가가 쿼리에서 오류를 찾을 수 있습니다) (부분 답을 기껏.)

은 ANSI 구문의 이동이 밖으로 술어에 합류 where 절과 가까운 테이블 참조에 배치합니다 가입 할 수 있습니다. 이것은 20 년 넘게 SQL 쿼리에서 모범 사례로 간주되었습니다. from 절에서 쉼표를 사용하지 않고 테이블이 함께 결합하는 방법을 명시해야하는 시간. 예 : 잘 모르겠어요

SELECT 
    personal_posts.id, 
    personal_posts.body, 
    personal_posts.posted_at, 
    personal_posts.postimg, 
    personal_posts.likes, 
    users.`username` 
FROM users 
INNER JOIN personal_posts ON users.id = personal_posts.user_id 
LEFT OUTER JOIN followers ON personal_posts.user_id = followers.user_id 
WHERE personal_posts.user_id = :userid 
ORDER BY personal_posts.posted_at DESC; 

참고 위의 쿼리는 **

+0

작동하지 않습니다. (추신 : 그것은 유효합니다 (유효한 내 말은 요청을 실행하지만 반복 문제가 작동하지 않는다는 것을 의미합니다) PHPMYADMIN에서 PHP로 제공합니다 잘못된 인수가 foreach()에서 *****에 제공됨 – Itsmoloco

+0

thanks 조인 구문을 표시하기위한 것입니다. –

관련 문제