Ce face mysqli_poll
Dai trei tablouri cu conexiuni (de obicei aceeași listă în toate) și un timp maxim de așteptare. La întoarcere, $read conține doar conexiunile care au rezultatul gata, $error pe cele cu erori, iar $reject pe cele fără interogare asincronă în desfășurare. Funcția returnează numărul de conexiuni gata.
Exemplele de pe această pagină folosesc baza de date magazin, cu tabelul produse (coloanele id INT AUTO_INCREMENT, nume VARCHAR(100) NOT NULL, pret INT și stoc INT) și patru rânduri: Laptop (3200 lei, 5 buc.), Mouse (80 lei, 40 buc.), Monitor (900 lei, 0 buc.) și Tastatură (150 lei, 12 buc.). Comenzile SQL sunt explicate în secțiunea MySQL. Rezultatele au fost scrise pentru MySQL 8, pentru că exemplele au nevoie de un server de baze de date.
Parametri
| Parametru | Descriere |
|---|---|
$read |
Conexiunile urmărite; la final rămân cele cu rezultat gata. |
$error |
Conexiunile urmărite pentru erori. |
$reject |
La final: conexiunile respinse. |
$seconds |
Câte secunde să aștepte cel mult. |
$microseconds |
Opțional. Microsecunde în plus. |
Ce returnează
Numărul de conexiuni gata sau false la eroare.
Exemple
Exemplul 1: Două interogări în paralel
<?php
$a = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
$b = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
mysqli_query($a, "SELECT 'stoc', SUM(stoc) FROM produse", MYSQLI_ASYNC);
mysqli_query($b, "SELECT 'valoare', SUM(pret * stoc) FROM produse", MYSQLI_ASYNC);
$inAsteptare = [$a, $b];
while ($inAsteptare) {
$citite = $erori = $respinse = $inAsteptare;
if (mysqli_poll($citite, $erori, $respinse, 2) < 1) {
continue;
}
foreach ($citite as $conn) {
[$ce, $valoare] = mysqli_fetch_row(mysqli_reap_async_query($conn));
echo "$ce: $valoare\n";
$inAsteptare = array_filter($inAsteptare, fn($c) => $c !== $conn);
}
}
Rezultat posibil (ordinea depinde de care interogare termină prima)
stoc: 57
valoare: 21000
Greșeli frecvente
- Refolosești aceleași tablouri după apel.
mysqli_pollle modifică; reconstruiește-le înainte de fiecare apel, ca în exemplu.
Comenzi înrudite
mysqli_reap_async_query: Preia rezultatul unei interogări trimise asincron cu mysqli_query(…, MYSQLI_ASYNC).mysqli_query: Trimite o interogare SQL către baza de date. Pentru SELECT returnează un rezultat din care citești rândurile.