more_results
تابع more_results در MySQLi بررسی می کند آیا «نتیجه های بیشتر» وجود دارد یا نه. «نتیجه (Result Set)» یعنی جدول داده برگشتی. این تابع بعد از اجرای multi_query() کاربرد دارد. اگر نتیجه بعدی باشد، TRUE می دهد؛ وگرنه FALSE می دهد. اینجا ساده و مدرسه ای یاد می گیری.
more_results در MySQLi چیست؟
وقتی چند پرس وجو (Query) را پشت سرهم با multi_query() می فرستی، هر پرس وجو یک نتیجه می سازد. با more_results() می فهمی نتیجه بعدی هست یا نه. سپس با next_result() به نتیجه بعدی می روی و با store_result() آن را می خوانی.
نکته: استفاده از more_results() بدون اجرای multi_query() معنی ندارد.
نمونه شیءگرا (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->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free_result();
}
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_store_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);
?>
گام های عملی کار با more_results
- پرس وجوها را با multi_query() اجرا کن.
- نتیجه را با store_result() بگیر و بخوان.
- اگر more_results() بود، با next_result() برو جلو.
خطاهای رایج و نکته ها
هشدار: اگر next_result() را صدا نزنی، در همان نتیجه می مانی و حلقه گیر می کند.
نکته: بعد از خواندن، همیشه منابع را آزاد کن؛ از free_result() استفاده کن.
برای مطالعه بیشتر درباره more_results در MySQLi و توابع مرتبط، این صفحات را ببین: multi_query و next_result و store_result.
جمع بندی سریع
- more_results() وجود نتیجه بعدی را می سنجد.
- همراه multi_query() استفاده می شود.
- با next_result() به نتیجه بعدی برو.
- نتیجه را با store_result() بخوان.
- پس از پایان، اتصال را ببند.