Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : MySQL Improved Extension : mysqli_stmt_store_result

mysqli_stmt_store_result

Transfers a result set from a prepared statement (PHP 5)
bool mysqli_stmt_store_result ( mysqli_stmt stmt )

Example 1581. Object oriented style

<?php
/* Open a connection */
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
   
printf("Connect failed: %s\n", mysqli_connect_error());
   exit();
}

$query = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20";
if (
$stmt = $mysqli->prepare($query)) {

   
/* execute query */
   
$stmt->execute();

   
/* store result */
   
$stmt->store_result();

   
printf("Number of rows: %d.\n", $stmt->num_rows);

   
/* free result */
   
$stmt->free_result();

   
/* close statement */
   
$stmt->close();
}

/* close connection */
$mysqli->close();
?>

Example 1582. Procedural style

<?php
/* Open a connection */
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
   
printf("Connect failed: %s\n", mysqli_connect_error());
   exit();
}

$query = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20";
if (
$stmt = mysqli_prepare($link, $query)) {

   
/* execute query */
   
mysqli_stmt_execute($stmt);

   
/* store result */
   
mysqli_stmt_store_result($stmt);

   
printf("Number of rows: %d.\n", mysqli_stmt_num_rows($stmt));

   
/* free result */
   
mysqli_stmt_free_result($stmt);

   
/* close statement */
   
mysqli_stmt_close($stmt);
}

/* close connection */
mysqli_close($link);
?>

Code Examples / Notes » mysqli_stmt_store_result

typer85

In response to the note below me for the claim that mysqli_fetch_fields is not compatible with prepared statements.
This is untrue, it is but you have to do a little extra work. I would recommend you use a wrapper function of some sort to take care of the dirty business for you but the basic idea is the same.
Let's assume you have a prepared statement like so. I am going to use the procedural way for simplicity but the same idea can be done using the object oriented way:
<?php
// Connect Blah Blah Blah.
$connectionLink = mysqli_connect( .... );
// Query Blab Blah Blah.
$query = "Select `Id` From `Table` Where `Id` = ?";
// Prepare Query.
$prepareObject = mysqli_prepare( $connectionLink , $query );
// Bind Query.
mysqli_stmt_bind_param( $prepareObject , 'i' , 1 );
// Execute Query.
mysqli_stmt_execute( $prepareObject );
?>
Now all the above is fine and dandy to anyone familiar with using prepared statements, but if I want to use mysqli_fetch_fields or any other function that fetches meta information about a result set but does not work on prepared statements?
Enter the special function mysqli_stmt_result_metadata. It can be used as follows, assume the following code segment immediatley follows that of the above code segment.
<?php
$metaData = mysqli_stmt_result_metadata( $prepareObject );
// I Can Now Call mysqli_fetch_fields using the variable
// $metaData as an argument.
$fieldInfo = mysqli_fetch_fields( $metaData );
// Or Even This.
$fieldInfo = mysqli_num_fields( $metaData );
?>
Take a look at the Manual entry for mysqli_stmt_result_metatdata function for full details on how to expose it with prepared statements.
Good Luck,


ucfirefly

fetch_fields() does not seem to be compatible with prepared statements like those used here. Makes things difficult if you're using a wildcard. I guess that's better for security in some obscure way.
-Alex Boese


Change Language


Follow Navioo On Twitter
mysqli_affected_rows
mysqli_autocommit
mysqli_bind_param
mysqli_bind_result
mysqli_change_user
mysqli_character_set_name
mysqli_client_encoding
mysqli_close
mysqli_commit
mysqli_connect_errno
mysqli_connect_error
mysqli_connect
mysqli_data_seek
mysqli_debug
mysqli_disable_reads_from_master
mysqli_disable_rpl_parse
mysqli_dump_debug_info
mysqli_embedded_server_end
mysqli_embedded_server_start
mysqli_enable_reads_from_master
mysqli_enable_rpl_parse
mysqli_errno
mysqli_error
mysqli_escape_string
mysqli_execute
mysqli_fetch_array
mysqli_fetch_assoc
mysqli_fetch_field_direct
mysqli_fetch_field
mysqli_fetch_fields
mysqli_fetch_lengths
mysqli_fetch_object
mysqli_fetch_row
mysqli_fetch
mysqli_field_count
mysqli_field_seek
mysqli_field_tell
mysqli_free_result
mysqli_get_charset
mysqli_get_client_info
mysqli_get_client_version
mysqli_get_host_info
mysqli_get_metadata
mysqli_get_proto_info
mysqli_get_server_info
mysqli_get_server_version
mysqli_get_warnings
mysqli_info
mysqli_init
mysqli_insert_id
mysqli_kill
mysqli_master_query
mysqli_more_results
mysqli_multi_query
mysqli_next_result
mysqli_num_fields
mysqli_num_rows
mysqli_options
mysqli_param_count
mysqli_ping
mysqli_prepare
mysqli_query
mysqli_real_connect
mysqli_real_escape_string
mysqli_real_query
mysqli_report
mysqli_rollback
mysqli_rpl_parse_enabled
mysqli_rpl_probe
mysqli_rpl_query_type
mysqli_select_db
mysqli_send_long_data
mysqli_send_query
mysqli_server_end
mysqli_server_init
mysqli_set_charset
mysqli_set_local_infile_default
mysqli_set_local_infile_handler
mysqli_set_opt
mysqli_slave_query
mysqli_sqlstate
mysqli_ssl_set
mysqli_stat
mysqli_stmt_affected_rows
mysqli_stmt_attr_get
mysqli_stmt_attr_set
mysqli_stmt_bind_param
mysqli_stmt_bind_result
mysqli_stmt_close
mysqli_stmt_data_seek
mysqli_stmt_errno
mysqli_stmt_error
mysqli_stmt_execute
mysqli_stmt_fetch
mysqli_stmt_field_count
mysqli_stmt_free_result
mysqli_stmt_get_warnings
mysqli_stmt_init
mysqli_stmt_insert_id
mysqli_stmt_num_rows
mysqli_stmt_param_count
mysqli_stmt_prepare
mysqli_stmt_reset
mysqli_stmt_result_metadata
mysqli_stmt_send_long_data
mysqli_stmt_sqlstate
mysqli_stmt_store_result
mysqli_store_result
mysqli_thread_id
mysqli_thread_safe
mysqli_use_result
mysqli_warning_count
eXTReMe Tracker