5

Click here to load reader

Dw03 Ctes Web - 09 - Conectar Php y Mysql

Embed Size (px)

DESCRIPTION

ergsdg

Citation preview

  • CLIENTES WEB Conexin entre PHP y MySQL

    Prof. Germn Rodrguez [email protected] 1

    USAR MYSQL EN PHP PHP tiene una librera de funciones nativas para conectarse a las base de datos MySQL.

    Por un lado reconoce la librera mysql y por otro mysqli. Se recomienda el uso de mysqli dado

    que las funciones que giran en torno a mysql sern eliminadas en prximas versiones de PHP

    como anuncian en su pgina oficial:

    Esta extensin est obsoleta a partir de PHP 5.5.0, y ser eliminada en el futuro

    Cualquiera sea la librera que se implemente (nosotros usaremos mysqli), para iniciar una

    conexin MySQL es necesario indicarle a PHP 4 datos importantes:

    1. Dnde se encuentra la base de datos: Es decir, en que servidor o IP.

    2. Cul es MI usuario de conexin al MySQL: Como todo sistema, tiene usuarios con ms

    permisos que otros. El usuario principal el administrador total- es el usuario root.

    3. Cul es la clave de conexin de este usuario.

    4. De todas las bases de datos que puede tener ese sistema, cul deseo utilizar para hacer

    las consultas.

    Por lo general, la conexin al MySQL ser nica, salvo que me encuentre trabajando con

    mltiples servidores a la vez (por ejemplo: haciendo una transferencia en tiempo real de un

    servidor a otro).

    Para conectarnos a algn servidor MySQL, debemos usar la funcin mysqli_connect y pasar

    como argumentos de la funcin los cuatro datos: servidor, usuario, clave, base a usar.

    Esta funcin nos devuelve un RECURSO, el cual deberemos usar luego para hacer cualquier

    transaccin con la base de datos (para que sepa en qu conexin de todas las que puedo tener,

    estoy trabajando).

    Nuestros datos de conexin en nuestra mquina 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 vaca, as que es

    una cadena de texto vaca.

    $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 simultneo, 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 combinacin

    de servidor-usuario-clave.

  • CLIENTES WEB Conexin entre PHP y MySQL

    Prof. Germn Rodrguez [email protected] 2

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

    todava- 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 ms de un resultado (o registro) se le pide que recorra todos los contenidos

    hasta que no haya ms datos. La ventaja de esta solicitud es que corta

    automticamente cuando ya no quedan registros.

    Ejemplo: Consulta que devolver DOS columnas (nombre y telfono) de UN nico registro:

    //Para PHP esto no es nada ms que una cadena de texto.

    $consulta = "SELECT nombre, telefono FROM usuarios WHERE id = 3";

    //La funcin 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 prxima 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 telfono del usuario con ID 3

  • CLIENTES WEB Conexin entre PHP y MySQL

    Prof. Germn Rodrguez [email protected] 3

    MYSQLI FETCH ASSOC La funcin 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 sern las columnas que haya solicitado el mysqli_query.

    Adems, una vez que haya procesado los datos, mover el cursor hacia abajo en el juego de

    registros (es decir a la prxima 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 catlogo online.

    Entonces si pudisemos hacer ms ptima esta consulta, podramos 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).

  • CLIENTES WEB Conexin entre PHP y MySQL

    Prof. Germn Rodrguez [email protected] 4

    MOSTRAR MLTIPLES RESULTADOS Para mostrar un juego de resultados, independientemente de su cantidad de registros,

    debemos usar una combinacin de las tcnicas 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 peticin la vamos a utilizar como condicin de un ciclo de

    repeticin abierto, es decir que termine slo cuando se acaben los datos. En este caso

    vamos a usar un while.

    Nuestra condicin 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'] .' ' ; //Muestro cada nombre y un salto de

    lnea.

    }

    Analizando el cdigo podemos darnos cuenta por qu esta estructura funciona perfectamente.

    1. Tenemos la funcin mysqli_fetch_assoc como condicin del while, y la guardamos en

    la variable $columnas.

    2. Como las asignaciones se resuelven antes que la condicin 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

    movindose 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 repeticin.

    Por ende, este ciclo de repeticin va a funcionar con uno, mucho o ningn 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).

  • CLIENTES WEB Conexin entre PHP y MySQL

    Prof. Germn Rodrguez [email protected] 5

    OTRAS FUNCIONES IMPORTANTES Algunas funciones que van a ser tiles para la interaccin 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 numrico 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 numrico del tipo $columnas[0] etc. Recibe como

    argumento las filas.

    mysqli_insert_id( $conexion ); - Despus de hacer una consulta de tipo

    INSERT INTO devuelve el ID que gener el MySQL para ese registro.

    Esta funcin es muy til cuando se inserta un registro en una tabla y ese valor ingresado

    se tiene que asociar con otra tabla ms (por ejemplo en una relacin N-N).

    Recibe como argumento la conexin.

    mysqli_free_result( $filas ); - borra de la memoria los registros que

    devolvi una consulta MySQL anterior.

    mysqli_close( $conexion ); - cierra la conexin al MySQL para no seguir

    consumiendo recursos.