> One should not use mysqli_use_result() if a lot of processing on the client side is performed, since this will tie up the server and prevent other threads from updating any tables from which the data is being fetched.
Another way of understanding the "blocking" behavior of this "use_result" method is that by using this method (or the MYSQLI_USE_RESULT flag on the "query" method), if attempting to run a second query of any kind - updates, inserts, selects, or other - while still working with these first results, the second query will fail. Checking mysqli->error, you should get a "Commands out of sync" error on the second query call.
However, if you use the "store_result" method (or the default MYSQLI_STORE_RESULT flag on the "query" method) instead, the second query will execute just fine.
Just to demonstrate this "blocking" behavior of this "use_result" method, the second query on line 7 below would otherwise fail if you instead used "use_result" on line 3:
<?php
$mysqli->real_query('SELECT * FROM `test`');
$query = $mysqli->store_result();
while ($row = $query->fetch_assoc()) {
$id = (int) $row['id'];
$query2 = $mysqli->query("UPDATE `test` SET `label` = md5(rand()) WHERE `id` = $id");
}
?>mysqli::use_result
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
mysqli::use_result
Референца за `mysqli.use-result.php` со подобрена типографија и навигација.
mysqli::use_result
mysqli_use_result
класата mysqli_driver
mysqli::use_result -- mysqli_use_result — (PHP 5, PHP 7, PHP 8)
= NULL
Напиши целосна ознака на елемент
Процедурален стил
Започни преземање на сет на резултати mysqli_real_query() Се користи за иницирање на преземање на сет на резултати од последниот извршен пребарување со помош на
функцијата на врската со базата на податоци. mysqli_store_result() Или ова или
Забелешка:
На mysqli_use_result() функцијата мора да се повика пред да може да се преземат резултатите од пребарувањето, и едната или другата мора да се повика за да се спречи следното пребарување на таа врска со базата на податоци да не успее. mysqli_data_seek() функцијата не пренесува цел сет на резултати од базата на податоци и затоа не може да се користи функции како mysqli_store_result()за да се префрлите на одреден ред во рамките на сетот. За да ја користите оваа функционалност, сетот на резултати мора да биде зачуван со користење mysqli_use_result() . Еден не треба да користи
Параметри
Оваа функција нема параметри.
Вратени вредности
ако се извршува многу обработка на клиентската страна, бидејќи ова ќе го врзе серверот и ќе спречи други нишки да ажурираат било кои табели од кои се преземаат податоците. false аргумент, или
Errors/Exceptions
Ако е овозможено известување за грешки на mysqli (MYSQLI_REPORT_ERROR) и бараната операција не успее, се генерира предупредување. Ако, дополнително, режимот е поставен на MYSQLI_REPORT_STRICT, а mysqli_sql_exception наместо тоа се фрла.
Примери
Пример #1 Враќа нетампониран објект со резултати или example
Напиши целосна ознака на елемент
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";
/* execute multi query */
if ($mysqli->multi_query($query)) {
do {
/* store first result set */
if ($result = $mysqli->use_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->close();
}
/* print divider */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while ($mysqli->next_result());
}
/* close connection */
$mysqli->close();
?>Процедурален стил
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";
/* execute multi query */
if (mysqli_multi_query($link, $query)) {
do {
/* store first result set */
if ($result = mysqli_use_result($link)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
/* print divider */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (mysqli_next_result($link));
}
/* close connection */
mysqli_close($link);
?>Горните примери ќе дадат излез:
my_user@localhost ----------------- Amersfoort Maastricht Dordrecht Leiden Haarlemmermeer
Види Исто така
- mysqli_real_query() - Извршува SQL барање
- mysqli_store_result() - Пренесува множество со резултати од последниот пребарување