use_result
تابع use_result در MySQLi یعنی «نتیجه بدون بافر (Unbuffered Result)». داده ها کم کم می آیند، مثل استوری اینستاگرام که لود می شود. حافظه کم تر مصرف می شود؛ اما باید ردیف ها را کامل بخوانی.
تعریف کوتاه و کاربرد
تابع $mysqli->use_result() یا mysqli_use_result() شروعِ گرفتن نتیجه آخرین کوئری را می دهد. نتیجه «بدون بافر» است؛ یعنی ردیف ها هنگام خواندن استریم می شوند.
نحو (Syntax)
$mysqli->use_result() و mysqli_use_result(connection)
نمونه شی گرا (Object-Oriented)
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
exit();
}
$sql = "SELECT Lastname FROM Persons ORDER BY LastName;";
$sql .= "SELECT Country FROM Customers";
if ($mysqli->multi_query($sql)) {
do {
if ($result = $mysqli->use_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->close();
}
if ($mysqli->more_results()) {
printf("-------------\n");
}
} while ($mysqli->next_result());
}
$mysqli->close();
?>
نمونه رویه ای (Procedural)
<?php
$con = mysqli_connect("localhost", "my_user", "my_password", "my_db");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
exit();
}
$sql = "SELECT Lastname FROM Persons ORDER BY LastName;";
$sql .= "SELECT Country FROM Customers";
if (mysqli_multi_query($con, $sql)) {
do {
if ($result = mysqli_use_result($con)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
if (mysqli_more_results($con)) {
printf("-------------\n");
}
} while (mysqli_next_result($con));
}
mysqli_close($con);
?>
گام های عملی با multi_query
- کوئری چندبخشی را اجرا کن با
multi_query. - نتیجه جاری را با
use_resultبگیر. - همه ردیف ها را بخوان و نتیجه را ببند.
- اگر نتیجه بعدی هست، با
next_resultبرو جلو.
نکته: چون نتیجه بدون بافر است، قبل از اجرای کوئری بعدی، خواندن را کامل کن.
هشدار: جهش میان نتایج بدون بستن نتیجه فعلی باعث خطا می شود.
مطالب مرتبط داخل سایت
برای مدیریت نتایج کنار use_result، صفحه thread_id و وضعیت سرور در stat را هم ببین.
جمع بندی سریع
- use_result نتیجه را استریم می کند.
- حافظه کم تر، ولی مدیریت سخت تر.
- قبل از کوئری بعدی، کامل بخوان.
- با next_result سراغ نتایج بعدی برو.