Вопрос
В чем разница между mysqli::store_result()
и mysqli::use_result()
?
История
Нечеткая документация
Документация на PHP.net кажется очень расплывчатой о различии между ними. mysqli::use_result()
-page не предлагает никаких кодовых образцов и связывает вас с mysqli::multi_query()
-page, чтобы искать их. На этой странице приведен следующий пример кода (см. Страницу для полного кода):
/* store first result set */
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}
/* print divider */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
mysqli::store_result()
-page использует точно такой же код-образец, за одним исключением:
/* store first result set */
if ($result = $mysqli->use_result()) {
Да... store_result
стал use_result
. Обратите внимание, что даже комментарий выше все еще говорит "хранить".
Еще более запутанный
Посмотрев образцы кода, подумал я; "Все в порядке, так что это псевдоним". Но ждать! Документация дает следующие описания:
- mysqli_store_result - переносит результирующий набор из последнего запроса
- mysqli_use_result - инициировать поиск набора результатов
Они кажутся двумя разными вещами и вообще не похожи на псевдонимы. Присмотревшись, я обнаружил, что в образце кода mysqli::use_result()
-page было еще одно исключение: $result->free();
стал $result->close();
. Однако мои надежды на то, чтобы узнать правду, вскоре были разрушены, когда я обнаружил, что на той же странице во втором примере кода (процедурный эквивалент) использовался mysqli_free_result($result);
, а не ожидаемый mysqli_close_result($result);
.