Saltar al contenido

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
<?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?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.