Parâmetros

The option that you want to set. It can be one of the following values:

Valid options

Name

Description

MYSQLI_STORE_RESULT_COPY_DATA

Copy results from the internal mysqlnd buffer into the PHP variables fetched. By default,
mysqlnd will use a reference logic to avoid copying and duplicating results held in memory.
For certain result sets, for example, result sets with many small rows, the copy approach can
reduce the overall memory usage because PHP variables holding results may be
released earlier (available with mysqlnd only, since PHP 5.6.0)

Valor Retornado

Returns a buffered result object or FALSE if an error occurred.

Nota:

mysqli_store_result() returns FALSE in case the query
didn't return a result set (if the query was, for example an INSERT
statement). This function also returns FALSE if the reading of the
result set failed. You can check if you have got an error by checking
if mysqli_error() doesn't return an empty string, if
mysqli_errno() returns a non zero value, or if
mysqli_field_count() returns a non zero value.
Also possible reason for this function returning FALSE after
successful call to mysqli_query() can be too large
result set (memory for it cannot be allocated). If
mysqli_field_count() returns a non-zero value, the
statement should have produced a non-empty result set.

Notas

Nota:

Although it is always good practice to free the memory used by the result
of a query using the mysqli_free_result() function,
when transferring large result sets using the
mysqli_store_result() this becomes particularly
important.

// process one row at a time from first SPwhile($picksRow = $resultPicks->fetch_array(MYSQLI_ASSOC)) {// Get Parameter for next SP$symbol = $picksRow['Symbol'];

// Free stored resultsclearStoredResults($mysqli);

// Execute second SP using value from first as a parameter (MYSQLI_USE_RESULT and free result right away)$resultData = $mysqli->query("CALL prcGetLastMACDDatesBelowZero('$symbol', $searchDate)", MYSQLI_USE_RESULT);$dataRow = $resultData->fetch_array(MYSQLI_ASSOC);

Beware when using stored procedures:If you connect to the database and then call dbproc A followed by a call to db proc B and then close the connection to the db, the second procedure call will not work.

It looks like there is a bug in MYSQL or mysqli that returns an extra recordset than you would expect. It then doesn't let you call another stored procedure until you finish processing all the recordsets from the first stored procedure call.

The solution is to simply loop through the additional recordsets between calls to db procs. Here is a function that I call between db proc calls: