Feb 09

Valores devueltos por Mysqli

Un problema que me ha costado mucho solucionar ha sido entender el funcionamiento de mysqli.

Veamos los distintos conceptos:

mysqli_query — Realiza una consulta a la Base de Datos

Si no devuelve resultados es que se trata de consultas de creación, borrado, inserción y actualización en la base de datos. De momento eso no se tratará en este artículo.

Cuando devuelve resultados esta consulta se ejecutará acompañada con una sentencia SELECT sobre la base de datos.

En ese momento pueden ocurrir dos cosas, que devuelva datos o que no encuentre datos.

Si no encuentra datos devolverá un error, por eso cada vez que hacemos una consulta con SELECT a la base de datos hay que preguntar por un posible error.

Yo utilizo la siguiente secuencia en mis modelos:

$mysqli = new mysqli(‘localhost’, ‘root’, », ‘mispartidas’);

//Indicar a la conexión de mysqli que use la codificacion UTF8 ¡¡¡MUY IMPORTANTE!!!
mysqli_set_charset($mysqli,»utf8″);

if ($mysqli->connect_errno) {
echo «Falló la conexión a MySQL: (» . $mysqli->connect_errno . «) » . $mysqli->connect_errno;
}

Si hay resultados es donde he encontrado más dificultad para entender como se tratan los mismos.

El resultado es un conjunto de filas de la base de datos que cumplen la condición de la SELECT.

Los datos recibidos se muestran con distintos métodos.

Pongamos el ejemplo de una consulta en la que queremos obtener un único dato. El ejemplo es obtener de la tabla torneos el nombre de un torneo en concreto.

$resultado4 = $mysqli->query(«SELECT mt_torneo FROM torneos WHERE mt_cdgo = ‘$id'»);

$linea = mysqli_fetch_array($resultado4);

return $linea[«mt_torneo»];

En $resultado4 llega un array con sólo una fila de la base de datos y con un solo campo mt_torneo, pero para poder tratarlo como un dato individual hay que extraerlas del array mediante mysqli_fetch_array($resultado4) y luego acceder al dato mediante $linea[«mt_torneo»].


Si lo que se obtiene es un numero indeterminado de filas de la base de datos entonces lo que hay que hacer es rellenar un array que contendra todas las filas obtenidas.

Por ejemplo como la siguiente secuencia en uno de mis modelos:

$resultado = $mysqli->query(«SELECT * FROM partidas WHERE mp_cdgotorneo = ‘$id’ ORDER BY mp_ronda ASC «);

$resultado = $mysqli->query(«SELECT * FROM partidas WHERE mp_cdgotorneo = ‘$id’ ORDER BY mp_ronda ASC «);

while ($fila = mysqli_fetch_array($resultado)) {
echo «Torneo: » . $fila[‘mt_anyo’] . » – » . $fila[‘mt_torneo’] . «<br />»;
}

En $resultado llega un array con varias filas de la base de datos con todos sus campos (columnas) pero para poder tratarlo como datos hay que extraerlo del array mediante mysqli_fetch_array($resultado) y luego acceder a los dato mediante un while que recorre el array y podemos referenciar los campos de cada fila usando como indice el nombre del campo.