COM_STMT_EXECUTE
Executes a previously prepared statement.
If specific data is large, it can be sent separately prior to this command (see COM_STMT_SEND_LONG_DATA).
If a statement is re-executed without changing the bind types, the types do not need to be sent to the server again.
Direction
Client to server.
Fields
- int<1> 0x17 : COM_STMT_EXECUTE header
- int<4> statement id
- int<1> flags:
- int<4> Iteration count (always 1)
- if (param_count > 0)
- byte<(param_count + 7)/8> null bitmap
- byte<1>: send type to server (0 / 1)
- if (send type to server)
- for each parameter :
- byte<1>: field type
- byte<1>: parameter flag
- for each parameter :
- for each parameter (i.e param_count times)
- byte<n> binary parameter value
Statement Id
Statement id is the identifier of the prepared statement (from COM_STMT_PREPARE answer)
Specific "-1" statement id value
Since MariaDB server version 10.2, value -1 (0xFFFFFFFF) can be used to indicate to use the last statement prepared on current connection if no COM_STMT_PREPARE has fail since.
This permit pipelining :
- send COM_STMT_PREPARE + COM_STMT_EXECUTE with statement id -1
- read read COM_STMT_PREPARE + COM_STMT_EXECUTE result
In case COM_STMT_PREPARE returns an error, COM_STMT_EXECUTE will return an error that statement id -1 is unknown. This permits to avoid much of the network latency.
Flag
0 | no cursor |
1 | read only |
2 | cursor for update |
4 | scrollable cursor |
Parameter flag
parameter type flag byte:
128 | unsigned |
NULL-Bitmap
The NULL-Bitmap indicates if parameters are null (one bit per parameter).
NULL-bitmap size is (parameter number + 7) / 8
Binary parameter encoding
COM_STMT_EXECUTE response
The server can answer with 3 different responses:
- 0xff: ERR_Packet if any errors occur.
- 0x00: OK_packet when query execution works without resultset.
- one (or more) Resultset, when query execution return rows (in case of SELECT query for example).