Saltar la navegación

3.1.2.- Ejecución de consultas.

Imagen del dibujo de un cilindor hueco verde con las letras sql en amarillo
Ignacio javier igjav (CC BY-SA)


La forma más inmediata de ejecutar una consulta, si utilizas esta extensión, es el método query, equivalente a la función mysqli_query. Si se ejecuta una consulta de acción que no devuelve datos (como una sentencia SQL de tipo UPDATE, INSERT o DELETE), la llamada devuelve true si se ejecuta correctamente o false en caso contrario. El número de registros afectados se puede obtener con la propiedad affected_rows (o con la función mysqli_affected_rows).

@$conProyecto = new mysqli('localhost', 'gestor', 'secreto', 'proyecto');
$error = $conProyecto->connect_errno;
if ($error == null) {
    $resultado = $conProyecto->query('DELETE FROM stock WHERE unidades=0');
    if ($resultado) {
        echo "<p>Se han borrado $conProyecto->affected_rows registros.</p>";
    }
    $conProyecto->close(); //cerramos la conexion
}

En el caso de ejecutar una sentencia SQL que sí devuelva datos (como un SELECT), éstos se devuelven en forma de un objeto resultado (de la clase "mysqli_result"). En el punto siguiente verás cómo se pueden manejar los resultados obtenidos.

El método "query()" tiene un parámetro opcional que afecta a cómo se obtienen internamente los resultados, pero no a la forma de utilizarlos posteriormente. En la opción por defecto, MYSQLI_STORE_RESULT, los resultados se recuperan todos juntos de la base de datos y se almacenan de forma local. Si cambiamos esta opción por el valor MYSQLI_USE_RESULT, los datos se van recuperando del servidor según se vayan necesitando.

$resultado = $conProyecto->query('SELECT producto, unidades FROM stock', MYSQLI_USE_RESULT);

Debes conocer

Otra forma que puedes utilizar para ejecutar una consulta es el método real_query (o la función mysqli_real_query), que siempre devuelve true o false según se haya ejecutado correctamente o no. Si la consulta devuelve un conjunto de resultados, se podrán recuperar de forma completa utilizando el método store_result, o según vaya siendo necesario gracias al método use_result.

Método real_query.

Es importante tener en cuenta que los resultados obtenidos se almacenarán en memoria mientras los estés usando. Cuando ya no los necesites, los puedes liberar con el método free de la clase mysqli_result (o con la función mysqli_free_result):

$resultado->free();

Autoevaluación

Pregunta

De las dos opciones que admite el método query, MYSQLI_STORE_RESULT y MYSQLI_USE_RESULT, ¿qué opción será recomendable utilizar para ejecutar una consulta que devuelva una enorme cantidad de datos?

Respuestas

MYSQLI_STORE_RESULT.

MYSQLI_USE_RESULT.

Retroalimentación