encuesta
En este artículo, discutiremos la función mysqli_poll() en PHP, que se utiliza para sondear conexiones.
Introducción a la función mysqli_poll()
La función mysqli_poll() es una función integrada en PHP que se utiliza para sondear conexiones. Esta función puede usarse para verificar si hay datos disponibles en una conexión antes de leerlos. La función mysqli_poll() puede utilizarse junto con E/S no bloqueante para hacer que tu aplicación sea más receptiva.
Importante: mysqli_poll() solo funciona con el controlador MySQLND. No está disponible cuando se utiliza el controlador más antiguo libmysql.
Cómo usar la función mysqli_poll()
Usar la función mysqli_poll() es sencillo. Aquí tienes un ejemplo:
¿Cómo usar la función mysqli_poll()?
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
exit();
}
// Enable non-blocking mode for asynchronous queries
$mysqli->options(MYSQLI_OPT_NONBLOCK, 1);
$links = [$mysqli];
$error = [];
$reject = [];
$timeout = 10;
while (!empty($links)) {
// mysqli_poll modifies the $links array by reference, keeping only ready connections
$ready = mysqli_poll($links, $error, $reject, $timeout, 0);
if ($ready === false) {
// Handle poll failure or timeout
echo "Poll failed or timed out.\n";
break;
}
foreach ($links as $link) {
if ($result = $link->reap_async_query()) {
// process the result set
$result->free();
} else {
// handle the error
echo "Query error: " . $link->error . "\n";
}
}
}
$mysqli->close();
?>En este ejemplo, primero creamos un nuevo objeto MySQLi usando el constructor mysqli(). Luego verificamos si la conexión fue exitosa usando la propiedad connect_errno. Si la conexión fue exitosa, habilitamos el modo no bloqueante mediante mysqli::options(MYSQLI_OPT_NONBLOCK, 1), lo cual es necesario para consultas asíncronas. Luego creamos un array de conexiones que queremos sondear, junto con los arrays $error y $reject vacíos. El array $error se llenará con mensajes de error de las conexiones que fallaron, mientras que $reject contendrá las conexiones que rechazaron activamente la solicitud de sondeo. Entramos en un bucle que continúa mientras haya conexiones para sondear. Dentro del bucle, llamamos a mysqli_poll() con el array de conexiones (pasado por referencia), los arrays de error/rechazo y un tiempo de espera de 10 segundos. Si hay datos disponibles en una o más conexiones, mysqli_poll() devuelve el número de conexiones listas y modifica el array $links para que contenga solo esas conexiones listas. Luego iteramos sobre las conexiones listas y llamamos al método reap_async_query() en cada una para recuperar los datos disponibles. Si mysqli_poll() devuelve false, manejamos el error o el tiempo de espera y salimos del bucle. Finalmente, cerramos la conexión.
Nota: Para cargas de trabajo asíncronas complejas, considera alternativas modernas como ReactPHP o Swoole, que proporcionan arquitecturas de bucle de eventos más robustas para PHP.
Conclusión
En conclusión, la función mysqli_poll() es una herramienta poderosa para sondear conexiones en PHP. Al comprender cómo usar la función, puedes hacer que tu aplicación sea más receptiva y eficiente al trabajar con bases de datos MySQL.
Práctica
¿Cuáles son los pasos principales para crear una encuesta simple usando PHP?