2012-06-04 4 views
1

내 진술은 다음과 같습니다. 이상한 준비 문 오류

   $stmt = $this->db->prepare(" 
         select q.id 
         from questions q 
         left outer join (
         select max(chk_date) as questions_last_chk_date 
         FROM last_check_date 
         where user_id = ? 
         AND chk_token=?) lcd 
         on q.add_dt > lcd.questions_last_chk_date 
         WHERE q.author_id<>? 
       ") or die($this->db->error); 
       $stmt->bind_param("isi", $_SESSION["userID"], "q", $_SESSION["userID"]) or die($stmt->error); 

내가 오류 메시지 얻기이 질문에

1)을 가지고

치명적인 오류 :

이 오류가 발생하는 이유를 참조
에 의해 매개 변수 (3)를 통과 할 수 없습니다? BTW, 나는 last_check_date 테이블이 비어 있지만이 문제와 관련이 없다고 생각합니다.

2) Windows에서 오류 메시지 테이블 last_check_date이 나타나지 않지만 오타가없고 테이블이 존재한다는 것을 100 % 알고 있습니다. Navicat - db amanger 응용 프로그램과 동일한 쿼리를 시도하고 결과를 얻었습니다. 하지만이 오류를 얻으려고 PHP를 시도 할 때. 원격 Linux 서버에서 작동하고 질문 1에서 오류 메시지가 표시됩니다. mysql 서비스를 다시 시작하려고 시도하고 다른 이름으로 이름을 바꾼 다음 이름을 이전 이름으로 다시 변경합니다. 성공하지 못했습니다! 어떻게 문제를 해결할 수 있습니까?

+1

나는 MySQLi 전문가가 아니지만 정적 매개 변수를 쿼리에 바인딩 할 수 없다고 생각합니다. 내 눈이 완벽하게 합리적입니다. 따라서 매개 변수 3을 변수로 설정하고 전달하거나 매개 변수 3이 이미 이미 존재하도록 쿼리를 변경하십시오. – clentfort

+0

@clentfort I gachu. 그러나 외부 조인을 사용하여이 작업을 수행 할 수 없습니다. 외부 조인에 대한 경험이 없습니다. 그게 왜 커뮤니티에 질문을 게시했는지 – heron

답변

3

변수에 q을 넣어야합니다.

참고로, 별칭 또는 참조와 동일한 문자열 값을 사용하지 마십시오. q 별칭이있는 테이블을 가지고있을 때 q 값을 전달 중입니다. 이것은 오류가 아니지만 쿼리의 반향을 수행해야하는 경우 매우 혼란 스러울 수 있습니다.