USAR MYSQL EN PHP

Anuncio
CLIENTES WEB
Conexión entre PHP y MySQL
USAR MYSQL EN PHP
PHP tiene una librería de funciones nativas para conectarse a las base de datos MySQL.
Por un lado reconoce la librería mysql y por otro mysqli. Se recomienda el uso de mysqli dado
que las funciones que giran en torno a mysql serán eliminadas en próximas versiones de PHP
como anuncian en su página oficial:
Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro
Cualquiera sea la librería que se implemente (nosotros usaremos mysqli), para iniciar una
conexión MySQL es necesario indicarle a PHP 4 datos importantes:
1. Dónde se encuentra la base de datos: Es decir, en que servidor o IP.
2. Cuál es MI usuario de conexión al MySQL: Como todo sistema, tiene usuarios con más
permisos que otros. El usuario principal –el administrador total- es el usuario root.
3. Cuál es la clave de conexión de este usuario.
4. De todas las bases de datos que puede tener ese sistema, cuál deseo utilizar para hacer
las consultas.
Por lo general, la conexión al MySQL será única, salvo que me encuentre trabajando con
múltiples servidores a la vez (por ejemplo: haciendo una transferencia en tiempo real de un
servidor a otro).
Para conectarnos a algún servidor MySQL, debemos usar la función mysqli_connect
y pasar
como argumentos de la función los cuatro datos: servidor, usuario, clave, base a usar.
Esta función nos devuelve un RECURSO, el cual deberemos usar luego para hacer cualquier
transacción con la base de datos (para que sepa en qué conexión de todas las que puedo tener,
estoy trabajando).
Nuestros datos de conexión en nuestra máquina local son los siguientes:
$servidor = 'localhost'; // localhost como cadena de texto.
$usuario = 'root'; // vamos a usar el usuario principal del mysql
$clave = ''; // el wamp instala un mysql con usuario root pero con clave vacía, así que es
una cadena de texto vacía.
$base = 'BLOG'; // asumimos que en el MySQL ya hemos creado una base llamada BLOG
con sus respectivas tablas.
$conexion = mysqli_connect( $servidor , $usuario , $clave );
Podemos tener distintas conexiones en simultáneo, en distintos servidores o con distintos
usuarios. Lo importante es tener presente que cada una se guarda en una variable distinta y
usaremos esa variable para hacer todas las transacciones que correspondan a esa combinación
de servidor-usuario-clave.
Prof. Germán Rodríguez – grodriguez@escueladavinci.net
1
CLIENTES WEB
Conexión entre PHP y MySQL
Desde este momento cualquier llamada a MySQL que se realice sobre $conexion se va a
realizar en la base BLOG dentro de LOCALHOST como ROOT sin clave.
PRIMERAS CONSULTAS
Para empezar a hacer consultas en MySQL debemos separar nuestra mente en dos instancias
distintas: La consulta y el resultado.
La consulta en sí que vamos a escribir, para PHP no significa nada, es solo una variable de tipo
'texto' (o String).
Para que PHP nos devuelva de la base de datos un registro de datos (los resultados) debemos
usar una serie de funciones que se encargarán de mandar esa cadena de texto a PHP y
devolver un objeto (de tipo Object) que será lo que la base de datos nos devuelva en base a
dicho string.
El flujo de trabajo de PHP con respecto a una solicitud de datos al MySQL es el siguiente:
1. Se escribe una cadena de texto (fija o con el uso de variables) que será lo que
pediremos.
2. Se le pide a PHP que mande esa cadena de texto a MySQL y devuelva un Objeto que
representa TODAS las filas encontradas, este objeto no tiene formato y no tenemos –
todavía- manera de acceder a su contenido.
3. Se le pide a PHP que convierta CADA FILA de ese objeto en un array asociativo (del tipo
$registro_actual['COLUMNA'] ) que devolverá como índice asociativo los nombres de
todas las columnas que devolvió el MySQL.
4. Si hubiese más de un resultado (o registro) se le pide que recorra todos los contenidos
hasta que no haya más datos. La ventaja de esta solicitud es que corta
automáticamente cuando ya no quedan registros.
Ejemplo: Consulta que devolverá DOS columnas (nombre y teléfono) de UN único registro:
//Para PHP esto no es nada más que una cadena de texto.
$consulta = "SELECT nombre, telefono FROM usuarios WHERE id = 3";
//La función mysqli_query manda una cadena de texto al MySQL y devuelve un objeto.
$filas = mysqli_query( $conexion , $consulta );
echo $filas; // Object ID con un numero de objeto, tenemos que trabajarlo como Array.
$columnas = mysqli_fetch_assoc( $filas );
//mysqli_fetch_assoc mueve el cursor a la próxima fila y devuelve las columnas pedidas a modo
de array asociativo $columnas['COLUMNA_PEDIDA'] ;
echo $columnas ; //muestra Array
echo $columnas['nombre'] ; // muestra el nombre del usuario con ID 3
echo $columnas['telefono'] ; // muestra el teléfono del usuario con ID 3
Prof. Germán Rodríguez – grodriguez@escueladavinci.net
2
CLIENTES WEB
Conexión entre PHP y MySQL
MYSQLI FETCH ASSOC
La función mysqli_fetch_assoc recibe como único argumento un objeto que sea el
resultado de un mysqli_query, y si ese objeto se pudo procesar, devolverá un array
asociativo cuyos índices serán las columnas que haya solicitado el mysqli_query.
Además, una vez que haya procesado los datos, moverá el cursor hacia abajo en el juego de
registros (es decir a la próxima fila del query). Llegado el caso que se acaben las filas,
devolverá un valor booleano false (y no un array).
Por lo cual si pedimos DOS usuarios, podemos usar el mysqli_fetch_assoc para pedir los
datos del primer usuario y volver a usarlo para pedir los datos del segundo usuario.
$query = "SELECT nombre FROM usuarios WHERE ID=3 or ID=4"; //Pido el 3 y 4
$filas = mysqli_query($conexion, $query ); //Traigo el objeto
$columnas = mysqli_fetch_assoc( $filas ); //Mueve el cursor a la fila 1 y trae las
columnas como Array Asociativo
var_dump( $columnas ); //Muestra en pantalla Array y el índice ‘nombre’ de ese usuario
echo $columnas['nombre']; //Muestra el nombre del usuario 1
$columnas = mysqli_fetch_assoc( $filas ); //Mueve el cursor a la fila 2 y trae las
columnas como Array Asociativo
var_dump( $columnas ); //Muestra en pantalla Array y el índice nombre de ese usuario
echo $columnas['nombre']; //Muestra el nombre del usuario 2
$columnas = mysqli_fetch_assoc( $filas ); //Mueve el cursor a la fila 3 que no
existe, porque solo pedimos 2 datos
var_dump( $columnas ); //Muestra en pantalla false
Claro está que este esquema es un tanto engorroso si se desean mostrar los últimos 100
productos de un catálogo online.
Entonces si pudiésemos hacer más óptima esta consulta, podríamos mostrar TODOS los
resultados sin importar si son 1, 100 o 5000.
Eso lo podemos hacer aprovechando ese último valor que vimos en pantalla (el false).
Prof. Germán Rodríguez – grodriguez@escueladavinci.net
3
CLIENTES WEB
Conexión entre PHP y MySQL
MOSTRAR MÚLTIPLES RESULTADOS
Para mostrar un juego de resultados, independientemente de su cantidad de registros,
debemos usar una combinación de las técnicas aprendidas.
1. En primera instancia le vamos a pedir al mysqli_fetch_assoc que nos devuelva una
de dos opciones: o Array –si hay registros- o false –cuando se acabe el juego de datos-.
2. En segunda instancia, esa petición la vamos a utilizar como condición de un ciclo de
repetición abierto, es decir que termine sólo cuando se acaben los datos. En este caso
vamos a usar un while.
Nuestra condición se limita a: mientras las filas digan que hay datos (que no sea false), repetir.
$consulta = "SELECT nombre FROM usuarios"; //Como no pongo un filtro where, trae
todos… los que sean
$filas = mysqli_query( $consulta , $conexion ) ;
while( $columnas = mysqli_fetch_assoc( $filas ) ){
echo $columnas['nombre'] .' <br />' ; //Muestro cada nombre y un salto de
línea.
}
Analizando el código podemos darnos cuenta por qué esta estructura funciona perfectamente.
1. Tenemos la función mysqli_fetch_assoc como condición del while, y la guardamos en
la variable $columnas.
2. Como las asignaciones se resuelven antes que la condición del while (por precedencia de
operadores), PRIMERO se intenta convertir el objeto $filas en array.
3. Si puede convertirlo, devuelve un tipo de dato Array.
4. Para las evaluaciones booleanas, un array tiene contenido, así que se comporta como
true. Se ejecuta el while.
5. Vuelve a intentar convertirse el objeto $filas en array.
6. En tanto y en cuanto devuelva un tipo de dato array, queda claro que seguirá
moviéndose por todo el juego de filas.
7. Cuando ya no pueda convertir a array, va a devolver false.
8. Cuando un while encuentra un valor de tipo false, corta toda la repetición.
Por ende, este ciclo de repetición va a funcionar con uno, mucho o ningún resultado (si MySQL
no devuelve datos, el objeto no se puede convertir; en la primera vuelta da false, termina el
ciclo sin hacer ninguna vuelta).
Prof. Germán Rodríguez – grodriguez@escueladavinci.net
4
CLIENTES WEB
Conexión entre PHP y MySQL
OTRAS FUNCIONES IMPORTANTES
Algunas funciones que van a ser útiles para la interacción con MySQL son:

mysqli_error(); - si hubo un error en el formato de la consulta, indicará
claramente el error (ejemplo: UNKNOWN COLUMN nombres - no existe la columna
nombres)

mysqli_num_rows( $filas ); - devuelve un valor numérico que representa la
cantidad de filas que devolvió la consulta mysql, recibe como argumento el OBJETO que
devolvió el query.

mysqli_fetch_row( $filas ); - hace lo mismo que mysqli_fetch_assoc, pero no
devuelve un array asociativo, sino uno numérico del tipo $columnas[0] etc. Recibe como
argumento las filas.

mysqli_insert_id( $conexion ); - Después de hacer una consulta de tipo
INSERT INTO devuelve el ID que generó el MySQL para ese registro.
Esta función es muy útil cuando se inserta un registro en una tabla y ese valor ingresado
se tiene que asociar con otra tabla más (por ejemplo en una relación N-N).
Recibe como argumento la conexión.

mysqli_free_result( $filas ); - borra de la memoria los registros que
devolvió una consulta MySQL anterior.

mysqli_close( $conexion ); - cierra la conexión al MySQL para no seguir
consumiendo recursos.
Prof. Germán Rodríguez – grodriguez@escueladavinci.net
5
Descargar