mysqli_stmt_store_result()
передает все строки результирующего набора в PHP память. Впоследствии «выборка» строк просто повторяется в наборе результатов в памяти. Это хорошо, если ваш набор результатов не слишком велик; это может превысить ваш PHP предел памяти. Эта функция возвращает только TRUE или FALSE. Вы можете вызвать его из своего объекта mysqli или из объекта оператора.
mysqli_use_result()
не передает весь набор результатов. Он делает отдельный вызов на сервер MySQL каждый раз, когда вы выбираете строку. Таким образом, ваша PHP память не должна содержать весь набор результатов одновременно. Вы можете обработать каждый ряд и выбросить его. Это полезно, когда набор результатов большой. Эта функция возвращает ресурс mysqli_result
. Вы можете вызвать его только из объекта mysqli, а не из объекта оператора, поэтому его нельзя использовать для подготовленных операторов.
Обратите внимание, что вы не можете получить количество строк в наборе результатов, пока клиент (PHP) не выберет все строки. Поэтому попытка прочитать mysqli_stmt_num_rows()
перед извлечением возвращает 0, даже если вы знаете, что в результате что-то должно быть. Использование функций store-result для этой цели считается выборкой результирующего набора.
mysqli_stmt_get_result()
- более новый метод в драйвере mysqlnd. Эта функция возвращает ресурс mysqli_result
из подготовленного оператора. Это помогает упростить кодирование вашей выборки l oop без использования mysqli_stmt_bind_result()
, что некоторых людей смущает.
mysqli_stmt_get_result()
всегда вызывает store-result для внутреннего использования, поэтому вам лучше иметь достаточно памяти в PHP чтобы сохранить полный набор результатов. Учитывая это, я не знаю, каким образом можно выполнять построчную выборку, если вы используете подготовленный оператор. Вам просто нужно убедиться, что вы не запускаете SQL запросов с большими наборами результатов.
Честно говоря, я избегаю mysqli, когда работаю с PHP. Я предпочитаю PDO. Много использования более чистое и менее запутанное. Я sh PHP только что устарел mysqli в то же время, что они устарели mysql. Или, по крайней мере, сделал четкое заявление о том, что PDO является предпочтительным.