2010-11-20 2 views
2

나는 쿼리의 시작이 비교하지 WHERE와 선택 : - 내가 그렇게 한 번에 한 단계를 이동하고있어 물론MySQL은 다중 테이블이 개 테이블

SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE tf_threads.thread_id=54

를, 그것은 하나의 단지 시작이다 시간이 지날수록 훨씬 나아질 것입니다. 그러나 지금 당장 붙어있는 것은 WHERE 절을 가져와 한 테이블의 열을 다른 열이 아닌 PHP 변수와 비교하는 방법입니다. 내가 가진

PHP의는 이것이다 :

SELECT $tf_threads.*, $tf_posts.* FROM $tf_threads, $tf_posts WHERE $tf_threads.thread_id=$tf_this_forum

여기서 중요한 비트 $tf_threads.thread_id=$tf_this_forum입니다. 이걸 시도하면 MySQL은 단순히 행을 반환하지 않고 MySQL은 Impossible WHERE noticed after reading const tables이라고 말합니다. 확실히 이것은 잘 작동해야합니까? 분명히, 그렇지 않아, 아무도 여기서 도와 줄 수 없어?

정말 감사합니다,

제임스

편집 : 나는이 같은 순수의 MySQL에서 질의를하고 시도 :

SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE tf_threads.thread_id=54

모두를 따옴표 54의 둘레와 없이 동일한 행 결과와 함께.

답변

1

쿼리에 암시 적으로 CROSS JOIN이 수행되고 있으므로 $ 부호가 너무 많이 들어있는 것으로 보입니다.

나는 다음과 같은 추가 변경을 건의 할 것입니다 :

  • 사용 ANSI-92은 ANSI-89 (쉼표)를 조인 대신 (키워드 가입)에 가입.
  • intval을 $ tf_this_forum에 적용하여 이것이 정수인지 확인하십시오.
  • 문자열에서 쿼리를 동적으로 생성하는 대신 바인드 매개 변수를 사용하는 것이 좋습니다.
  • PHP 변수를 언급 할 때 $ 만 사용하십시오. CONST 테이블을 읽은 후에 알게 WHERE 에러 관해서는

는 불가 이는 행이 일치 없다는 것을 의미한다. 검색중인 행이 데이터베이스에 실제로 있는지 확인하십시오. 그렇지 않을 수도 있습니다.

+0

고마워요! 당신의'JOIN' 총알 포인트는 훌륭하게 작동했습니다; 이 쿼리는 완벽하게 작동합니다 : SELECT tf_threads. *, tf_posts. * FROM tf_threads LEFT JOIN tf_posts ON tf_threads.thread_id = 54' – Bojangles

1
SELECT tf_threads.*, tf_posts.* FROM tf_threads, tf_posts WHERE 
tf_threads.thread_id='$tf_this_forum' 

참고 : mysql_real_escape_string$tf_this_forum가 아직 탈출하지 않은해야합니다.

+0

입력 해 주셔서 감사합니다.하지만 'thread_id'는 숫자 입력란입니다. 혼동을 피하기 위해 OP에 입력해야합니다. 솔루션에 대한 @Mark Byer의 게시물을 참조하십시오 :-) – Bojangles

+0

또한 다른 사용자에게 좋은 조언을 전하기 위해 +1 - 항상 변수가 숫자가 될 것이라고 보장 할 수는 없습니다! – Bojangles