2009년 1월 27일 화요일

Prepared Statement의 패킷1

Prepare Command Packet
Prepared statement에서는 실제의 SQL문을 실행하지 전에 Prepare명령을 실행한다. 
이 시점에서 클라이언트에서 서버로 Command Packet이 보내어진다. 
명령어번호는 0x16(COM_STMT_PREPARE)로 되고, 보통의 SQL문의 0x03(COM_QUERY)하고 다르다. 
그 후에는 SQL문이 그대로 기술되어진다. 
Prepared statement에는 통상 placeholder(「?」)이 포함되지만  이것은 「?」라는 문자열(0x3f)가 그대로 보내지고 특별한 취급은 하지 않는다. 

Prepare Command Packet
패킷헤더: 4바이트
명령어번호: 1바이트 , Prepare때는 0x16(COM_STMT_PREPARE)
 SQL문본체: n바이트,  Prepare때의 SQL문이 그대로 보내어진다. 
   ex> SELECT * FROM tbl1 WHERE col1 <= ? AND col2 =?;
     -->53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 62 6c 31 20 57 48 45 52 45 20  63 6f 6c 31 20 3c 3d 20 3f 20 41 4e 44 20 63 6f 6c 32 20 3d 20 3f


서버에서 클라이언트로는 검색용의 경우는 다음의 구성으로 패킷이 반환된다. 

 Prepare Header Packet 1패킷
 Placeholder Packets  placeholder갯수만큼의 패킷
 EOF Packet 1패킷
 Field Packets 컬럼수만큼의 패킷
 EOF Packet  1패킷

갱신용(결과셋이 반환되지 않는 명령)의 경우는 Field Packet이후는 보내어지지 않지만 Prepare Header Packet, Placeholder Packets, EOF Packet는 보내어진다.