2011-03-18 5 views

답변

4

원하는 위치에 자리 표시자를 넣을 수는 없습니다. 매개 변수 자리 표시자는 일반적으로 표현식을 예상 할 수있는 명령문 내의 해당 위치에만 나타납니다. 특히 매개 변수 자리 표시자를 사용하여 식별자 나 전체 문 구조를 매개 변수화 할 수는 없습니다. 그것이 당신의 시도가 실패하는 이유입니다.

MYSQL에서 준비된 명령문 및 동적 SQL과 관련하여 유용한 정보는 Roland Bouman's blog -> MySQL 5: Prepared statement syntax and Dynamic SQL에서 찾을 수 있습니다. 사용 목적이 같은 인 경우

:

prepare test 
    from 
    'select * from ?' ; 
set @myt := 'myTable' ; 
execute test 
    using @myt ; 

단순히 작동하지 않습니다. 그러나 이것을 무시할 수 있습니다 :

set @myt := 'myTable' 
set @qtext := concat('select * from ',@myt) ; 
prepare test 
    from @qtext ; 
execute test ; 
1

변수로 테이블 이름을 사용 해 본 적이 한번도 없었습니다. 그게 허락되지 않을지 모르겠다. 다음을 시도해보십시오.

PREPARE test FROM "SELECT * FROM table_name WHERE column = ?"; 

오류 메시지가 표시되지 않으므로 어둠 속에서 찌르기입니다.

+0

이것은 준비된 명령문에서'?'를 사용할 수있는 좋은 예입니다. –

+0

@ypercube 제가 옳았다는 것을 아는 것이 좋지만, 당신의 대답은 확실히 우수합니다. IMHO가 누락 된 유일한 것은 할 수있는 일과 할 수없는 일의 사양에 대한 링크입니다. –

+0

오, 준비된 진술에 대해이 문제와 많은 기술을 철저히 설명하는 블로그 글을 추가하는 것을 잊어 버렸습니다. 나는 그것을 지금 추가 할 것이다. –