Documentation Home
MySQL 8.4 C API Developer Guide
Download this Manual
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


6.4.3 mysql_stmt_attr_set()

boolmysql_stmt_attr_set(MYSQL_STMT *stmt,                    enum enum_stmt_attr_type option,                    const void *arg)

Description

Can be used to affect behavior for a prepared statement. This function may be called multiple times to set several options.

Theoption argument is the option that you want to set. Thearg argument is the value for the option.arg should point to a variable that is set to the desired attribute value. The variable type is as indicated in the following table.

The following table shows the possibleoption values.

OptionArgument TypeFunction
STMT_ATTR_UPDATE_MAX_LENGTHbool *If set to 1, causesmysql_stmt_store_result() to update the metadataMYSQL_FIELD->max_length value.
STMT_ATTR_CURSOR_TYPEunsigned long *Type of cursor to open for statement whenmysql_stmt_execute() is invoked.*arg can beCURSOR_TYPE_NO_CURSOR (the default) orCURSOR_TYPE_READ_ONLY.
STMT_ATTR_PREFETCH_ROWSunsigned long *Number of rows to fetch from server at a time when using a cursor.*arg can be in the range from 1 to the maximum value ofunsigned long. The default is 1.

If you use theSTMT_ATTR_CURSOR_TYPE option withCURSOR_TYPE_READ_ONLY, a cursor is opened for the statement when you invokemysql_stmt_execute(). If there is already an open cursor from a previousmysql_stmt_execute() call, it closes the cursor before opening a new one.mysql_stmt_reset() also closes any open cursor before preparing the statement for re-execution.mysql_stmt_free_result() closes any open cursor.

If you open a cursor for a prepared statement,mysql_stmt_store_result() is unnecessary, because that function causes the result set to be buffered on the client side.

Return Values

Zero for success. Nonzero ifoption is unknown.

Errors

None.

Example

The following example opens a cursor for a prepared statement and sets the number of rows to fetch at a time to 5:

MYSQL_STMT *stmt;int rc;unsigned long type;unsigned long prefetch_rows = 5;stmt = mysql_stmt_init(mysql);type = (unsigned long) CURSOR_TYPE_READ_ONLY;rc = mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*) &type);/* ... check return value ... */rc = mysql_stmt_attr_set(stmt, STMT_ATTR_PREFETCH_ROWS,                         (void*) &prefetch_rows);/* ... check return value ... */