What's the difference between the mysqli funct

2020-02-23 08:12发布

问题:

I'm running into problems knowing when and what to call after mysqli_stmt_execute
How do you know when to call

  1. mysqli_stmt_bind_result
  2. mysqli_stmt_store_result
  3. mysqli_stmt_fetch

回答1:

mysqli_stmt_bind_result() tells mysqli which variable you want to be populate when you fetch a row, but it doesn't fetch() anything yet. This is necessary to call once, before you call fetch.

mysqli_stmt_store_result() sets an optional behavior so that the client downloads all rows when you fetch() the first row, and caches the whole result set in the client (i.e. PHP). Subsequent fetch() calls will simply iterate over this client-cached result set. But setting this option itself does not cause a fetch() yet either. This function is totally optional.

mysqli_stmt_fetch() returns the next row in the result set, and causes it to be stored in a bound variable. You must call this function in a loop, for each row of the result set. That is, until the fetch returns false.



回答2:

The process of querying an SQL database contains these steps:

  • sending of the query to the SQL server
  • the SQL server parsing the query and gathering the requested result set
  • transferring of the found result set data from the SQL server to PHP
  • putting the data into PHP variables somehow so the script can work with them

The functions you ask about have these roles in this process:

  • store: transfer all rows immediately from the MySQL database into PHP's memory; typically has no practical effect and is done automatically at some point anyway
  • bind: bind variables, so that when you call fetch() those variables contain result data; i.e. tell PHP which variables it should put the result into
  • fetch: "read" a row from the result set and store it in the variables you previously bound; if the data is not in PHP's memory yet it will be transferred from the SQL server at this point