2009-06-11 2 views
0

사용자는 링크를 클릭하는 다른 페이지에서이 페이지로 이동하며 ?photo_id=과 ID 번호가 추가됩니다. 이 페이지에 도착했을 때 특정 정보를 시청자가 이용할 수있게하고 싶습니다.MySQLI에 대해 초기화 된 준비 문을 사용하는 동안 왼쪽 결합은 어떻게 작동합니까?

사진, 사진 이름 및 사진 작가의 이름을 볼 수 있기를 바랍니다. 처음 두 개는 문제가되지 않습니다. 왜냐하면 photo_id, photo_filenamephoto_title이 모두 같은 테이블에 있기 때문입니다. photographers이라는 다른 테이블에있는이 사진에 대한 정보를 얻 자마자 문제가 발생합니다.

$sql = 'SELECT photos.photo_id, photos.photo_title, photos.photo_filename, photos.photographer_id, photographers.photographer_id, photographers.photographer_name 
     FROM photos 
     LEFT JOIN photographers ON photos.photographer_id = photographers.photographer_id 
     WHERE photo_id = ?'; 

//initialize prepared statement 
$stmt = $conn->stmt_init(); 
if ($stmt->prepare($sql)) { 
    $stmt->bind_param('i', $_GET['photo_id']); 
    $stmt->bind_result($photo_id, $photo_title, $photo_filename, $photographer_id); 
    $OK = $stmt->execute(); 
    $stmt->fetch(); 
} 

처음 세 개의 변수 ($photo_id, $photo_title$photo_filename) 잘 작동하고 내 페이지에 그들을 밖으로 에코 할 수 있지만, 나는 LEFTJOIN 등을에서 추가 된 다른 변수 : 여기

내 코드입니다 다른 표의 photographers.photographer_idphotographers.photographer_name과 같이 작동하지 않습니다. 아는 바와 같이 SELECT 행에 추가 열 이름을 추가하면 페이지가 완전히 손상됩니다.

bind_result() 함수의 변수의 양과 관련이 있다는 느낌이 들었습니다. 나는 그들이 SELECT 행에 언급 된 열의 수를 일치시킬 필요가 있다고 생각하지만 각각에 대해 변수를 만들고 싶지는 않다.

아무도 도와 줄 수 있습니까?

답변

0

앞에서 언급 한 것처럼 6 개의 열을 선택하지만 처음 4 개만 바인딩합니다. 6 개의 열을 모두 필요로하지 않으면 열을 선택하지 마십시오. 그것이 당신이 생각하는 것이라면, 당신이 가입하고있는 컬럼을 선택할 필요가 없습니다.

0

@BipedalShark 말했다 무엇 플러스 ... : 당신이 LEFT JOIN을 다하고 있기 때문에, 당신이 사진 누구의 사진 작가를 알 수 없거나 사진 작가 표 (*)에서 누락 준비하고 의미합니다 -하지만에 그 테이블에있는 SELECT 인 열은 NULL이됩니다. 어쩌면 COALESCE SQL에 넣고 싶습니까? 아니면 실제로 INNER JOIN ...을 의미할까요? 그냥 확인!

(*) 그 LEFT JOIN의 의미 - 그것은 당신이 일치하는 행은 오른쪽 테이블에 없다 경우에도 WHERE 일치하는 왼쪽 테이블의 모든 행을 얻을 수 있도록, 조인 외부

관련 문제