MySQL Prepared Statements

PREPARE ps_name FROM preparable_stmt
EXECUTE ps_name [USING @var1 [,@var2]...]
{DEALLOCATE | DROP} PREPARE ps_name
A prepared statement is deallocated automatically at the end of a session. A prepared statement is not shared by other sessions.
Prepared statements cannot be nested or contain multi-statements.
If a prepared statement is constructed in a stored routine, it won’t be cleared when the stored routine exits. As such, a prepared statement cannot refer to stored routines’ parameters or local variables.
? is used as parameter markers in preparable_stmt.

Preparable statements
ALTER TABLE
ALTER USER
ANALYZE TABLE
CACHE INDEX
CALL
CHANGE MASTER
CHECKSUM {TABLE | TABLES}
COMMIT
{CREATE | DROP} INDEX
{CREATE | RENAME | DROP} DATABASE
{CREATE | DROP} TABLE
{CREATE | RENAME | DROP} USER
{CREATE | DROP} VIEW
DELETE
DO
FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS  | PRIVILEGES  | LOGS | STATUS | MASTER | SLAVE | DES_KEY_FILE | USER_RESOURCES}
GRANT
INSERT
INSTALL PLUGIN
KILL
LOAD INDEX INTO CACHE
OPTIMIZE TABLE
RENAME TABLE
REPAIR TABLE
REPLACE
RESET {MASTER | SLAVE | QUERY CACHE}
REVOKE
SELECT
SET
SHOW {WARNINGS | ERRORS}
SHOW BINLOG EVENTS
SHOW CREATE {PROCEDURE | FUNCTION | EVENT | TABLE | VIEW} SHOW {MASTER | BINARY} LOGS
SHOW {MASTER | SLAVE} STATUS
SLAVE {START | STOP}
TRUNCATE TABLE
UNINSTALL PLUGIN
UPDATE

PREPARE ps FROM 'SELECT ? + ?;';
SET @a=1, @b=2;
EXECUTE ps USING @a, @b;
DEALLOCATE PREPARE ps;
3