В чем разница между функциями mysqli bind_result, store_result и fetch?

Я сталкиваюсь с проблемами, зная, когда и что вызывать после mysqli_stmt_execute
Как вы знаете, когда звонить

  1. mysqli_stmt_bind_result
  2. mysqli_stmt_store_result
  3. mysqli_stmt_fetch

mysqli_stmt_bind_result() сообщает mysqli, какую переменную вы хотите заполнить, когда вы извлекаете строку, но она еще не fetch() . Это необходимо вызвать один раз, прежде чем вы вызовете выборку.

mysqli_stmt_store_result() устанавливает необязательное поведение, так что клиент загружает все строки, когда вы fetch() первую строку, и кэширует весь набор результатов в клиенте (то есть PHP). Последующие вызовы fetch() будут просто перебирать этот набор данных с кэшированием с клиентом. Но установка этого параметра сама по себе также не вызывает fetch (). Эта функция полностью необязательна.

mysqli_stmt_fetch() возвращает следующую строку в наборе результатов и заставляет ее сохранять в связанной переменной. Вы должны вызвать эту функцию в цикле для каждой строки результирующего набора. То есть, пока выборка не вернет false.

Процесс запроса базы данных SQL содержит следующие шаги:

  • отправка запроса на SQL-сервер
  • SQL-сервер, анализирующий запрос и собирающий запрошенный набор результатов
  • перенос найденных данных набора результатов с сервера SQL на PHP
  • помещая данные в переменные PHP так или иначе, чтобы сценарий мог работать с ними

Функции, о которых вы спрашиваете, имеют эти роли в этом процессе:

  • store: перенести все строки сразу из базы данных MySQL в память PHP; обычно не имеет практического эффекта и в любом случае автоматически выполняется в какой-то момент
  • bind: связывать переменные, так что когда вы вызываете fetch() эти переменные содержат данные результата; т.е. скажите PHP, какие переменные он должен поместить результат в
  • fetch: «читать» строку из набора результатов и хранить ее в переменных, которые вы ранее связывали; если данные не хранятся в памяти PHP, они будут перенесены с SQL-сервера в этот момент