crear una conexión a mysql con pdo

Upload: arturmartinez

Post on 12-Oct-2015

56 views

Category:

Documents


0 download

TRANSCRIPT

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    1/24

    Crear una conexin a MySQL con PDO

    Anteriormente hice un video donde muestro como realizar una conexin a base de datosMySQL con PDO (http://behstant.com/blog/?p=167), pero para aquellos que les gusta las

    cosas simples hago este post para mostrar cmo realizar un conexin de una forma simple.

    El significado de PDO es PHP Data Objects, lo que significa que trabajamos conProgramacin Orientada a Objetos (POO). Para poder trabajar con PDO necesitamos crearuna instancia de la clase PDO. Algunos mtodos son: prepare, execute, exec,beginTransaction, bindParam, commit. Estos mtodos los voy ir tratando durante el resto deposts en el blog.

    Lo primero que tenemos que hacer antes de crear nuestra conexin es verificar que tenemosPDO disponible para trabajar, entonces con el siguiente cdigo verificamos que estehabilitado. Copia y guarda el archivo con un nombre de phpinfo.php y lo ejecutas en tu

    servidor:

    ?12345

    Esta es la informacin que te debe de salir:

    Si todo esta correcto entonces ahora si procedemos a crear nuestra conexin con la clasePDO usando el siguiente cdigo:

    ?

    123

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    2/24

    45678

    910

    echo"Conexin realizada con xito !!!";}catch(PDOException $ex) {

    echo$ex->getMessage();exit;

    }?>

    Cuando se utiliza PDO o algn otro cdigo de dispare una excepcin (el termino en ingleses throw) se necesita agrupar el cdigo en un bloque try-catch, si todo marcha bien nuestrocdigo se ejecuta sin error, en dado caso de que salga algo mal agarramos el error en elcatch.

    El siguiente cdigo merece la pena comentarlo un poco ms:

    ?1234

    catch(PDOException $ex) {echo$ex->getMessage();exit;

    }

    Debemos de tener cuidado de que echo $ex->getMessage(); no est siempre visible, ya quesi se presenta un error nuestro usuario de conexin o nuestra contrasea puede sermostrada, el uso de getMessage() es para que nosotros podamos depurar nuestro cdigo,entonces lo que debemos de hacer es mostrar otro mensaje, quedando nuestro cdigo paraser usado de la siguiente manera :

    ?123456789

    10

    Ya con este cdigo tenemos un objeto PDO con el cual podemos empezar a interactuar conla base de datos, pero estar haciendo uso de nuestro objeto instanciado $conn en lassiguientes posts.

    El cdigo fuente de este ejemplo lo podemos observar y descargar deaqu:http://paste.behstant.com/index.php?show=47

    http://behstant.com/blog/?p=333http://behstant.com/blog/?p=333http://behstant.com/blog/?p=333http://behstant.com/blog/?p=333http://paste.behstant.com/index.php?show=47http://paste.behstant.com/index.php?show=47http://paste.behstant.com/index.php?show=47http://paste.behstant.com/index.php?show=47http://behstant.com/blog/?p=333http://behstant.com/blog/?p=333
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    3/24

    Mtodo PDO::query para obtener

    resultados con MySQL

    Esta es la continuacin de los tutoriales para manejar base de datos con PHP y PDO.

    Qu es lo que se necesita para poder completar este tutorial?

    Primero que nada es necesario haber hecho con xito una conexin a nuestra base de datoscon PDO, si aun no has completado el tutorial te invito a que pases a revisarlo antes decontinuar.

    Crear una conexin a MySQL con PDO

    Basada en la explicacin para crear una nueva instancia de PDO, vamos a hacer una

    funcin que podamos reutilizar cuantas veces queramos. Entonces el primer archivo queusamos es

    Connection.simple.php

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    4/24

    12

    13

    14

    15

    16

    17

    18

    19

    echo'

    Cannot connect to database !!

    ';

    exit;

    }

    return$conn;

    }

    ?>

    De este archivo tenemos que tener en cuenta 4 cosas: El host, la base de datos, el usuario y

    la contrasea. Esta informacin la vamos a crear con phpMyAdmin siguiendo los siguientespasos(Si ya saben como crear esta informacin omitir los pasos e irse al cdigo PHP):

    Crear la Base de Datos (Click en las imgenes para hacer mas grande)

    Crear la Tabla

    Crearemos la tabla que se va a llamar empleado con 4 campos.

    Crear el Usuario

    Creamos al usuario con los datos que estn en nuestro cdigo

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    5/24

    Crear las columnas

    Ir a la consola de MySQL

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    6/24

    Una vez que tengamos abierta nuestra consola seleccionamos nuestra base de datos, una vezseleccionada pegamos el siguiente cdigo. vamos a ingresar para agregar informacin a nuestra

    tabla. En mi caso y para este tutorial estoy utilizando WAMP, si necesitas descargarlo lo

    encuentras aquhttp://www.wampserver.com/en/

    ?

    1

    2

    3

    INSERTINTOempleado VALUES(null,"Dennis

    Ritchie","[email protected]","555-154-8745");

    INSERTINTOempleado VALUES(null,"Ken

    Thompson","[email protected]","555-154-1234");

    INSERTINTOempleado VALUES(null,"Steve Jobs","[email protected]","751-121-

    8125");

    ?

    1

    http://www.wampserver.com/en/http://www.wampserver.com/en/http://www.wampserver.com/en/http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://www.wampserver.com/en/
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    7/24

    Comprobar que los datos se encuentre insertados.

    Script 1

    phpParameters-01.phpUna vez que ya tenemos creada nuestra base de datos y nuestratabla poblada de informacin pasemos a lo mas importante que es obtener informacin con

    PDO y luego mostrarla. 1.- Primero tenemos que hacer agregar el archivoConnection.simple.php para poder hacer uso de la funcin dbConnect(). 2.- Crear unobjecto llamado $conn, digo objeto por que al usar dbConnect() creamos una instancia dePDO. 3.- Para hacer las cosas mas limpias creamos una variable llamada $sql dondecreamos nuestro query. 4.- De nuestra conexin $conn podemos acceder al mtodo query()que recibe como parmetro una cadena. query() nos devuelve un tipo PDOStatement delcual usamos un mtodo que se llama fetchAll(), fetchAll() nos devuelve un arreglo

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    8/24

    asociativo que recorremos posteriormente con un foreach. 5.- En nuestro foreachaccedemos a nuestro arreglo y lo imprimimos.

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    Y este sera nuestro resultado:

    http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    9/24

    Script 2 Salida Heredoc y PHP inline

    phpParameters-02.php

    En el script dos lo que hacemos es formatear un poco mas nuestro resultado en una tabla.Primero lo hago en formato Heredoc para hacer uso del metodo

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    10/24

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    // Extract the values from $result

    $rows= $result->fetchAll();

    // Since the values are an associative array we use foreach to

    extract the values from $rows

    // ####### We format the result in a table using Heredoc. #######

    echo

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    11/24

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    }

    echo'';

    echo'';

    ?>

    Version Normal o Inline

    ID

    Nombre

    Email

    Telefono

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    12/24

    59

    60

    61

    62

    63

    64

    65

    Y este sera nuestro resultado:

    Comentarios finales

    Como se puede observar el mtodo query para extraer datos no es muy complejo, solo hayque familiarizarse con el. En el tutorial he demostrado varias cosas que a lo mejor parececonfusas para algunos, si eres uno de ellos no dudes en preguntar

    Cdigo fuente

    Comparto el cdigo fuente que utilice para hacer este tutorial. Descrgaloaqu

    http://behstant.com/downloads/download.php?file=3http://behstant.com/downloads/download.php?file=3http://behstant.com/downloads/download.php?file=3http://behstant.com/downloads/download.php?file=3
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    13/24

    Mtodo PDO::prepare Obtener Resultados

    con Parametros

    En el postMtodo PDO::query para obtenerresultados con MySQLmostr como hacer un query y mostrar los resultados, ahora vamosa ir a algo un poco mas interesante que es obtener informacin basado en un ID deempleado. Nuestro objetivo es que con el ID del empleado nos muestre su nombre. La

    informacin ser proporcionada a travs de un campo de texto en una forma HTML.

    Busqueda de EmpleadoId de empleado:

    Nombre de Empleado:

    Para el post utilizamos la Base de Datos creada enMtodo PDO::query para obtenerresultados con MySQL,si an no la tienes puedes visitar el post y descargar los archivos.

    El mtodo PDO::prepare() nos permite preparar un query con los datos que queremosenviar a este.

    En vez de hacer un query concatenado como se haca anteriomente en el MySQL antiguo:

    ?1SELECTnombre FROMempleado WHEREid_empleado = 2

    Ahora vamos a utilizar Named Placeholders (Parametro con Nombre)que van arepesentar los valorque vamos a ligar. los Named Placedholders estan dentro de nuestro

    query y se escribe el nombre que queramos empezando con dos puntos (colon).

    ?1SELECTnombre FROMempleado WHEREid_empleado = :id

    Entonces nuestro cdigo para hacer el query y obtener los resultados es el siguiente:

    ?

    http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    14/24

    12345

    $sql= 'SELECT nombre FROM empleado WHERE id_empleado = :id';$stmt= $conn->prepare($sql);$stmt->bindParam(':id',$_POST['id'], PDO::PARAM_INT);$stmt->execute();$result= $stmt->fetchColumn();

    PDO::PARAM_INT, es para ser mas explicito en los datos que les estamos enviado.Algunos tipos de datos que se manejan son:

    ?123

    PDO::PARAM_INT: Integer (whole number)PDO::PARAM_LOB: Binary (such asan image, Word document, orPDF file)PDO::PARAM_STR: String (text)

    Sin embargo no se ve ninguno para un punto flotante, por lo tanto el 3er argumento esopcional, as que lo puedes dejar sin argumento.

    Si no queremos utilizar PDO::bindingParam podemos enviar la informacin directa aexecute en forma de arrelgo:

    ?

    1234

    // prepare statement$stmt= $conn->prepare($sql);// execute query by passing array of variables$stmt->execute(array(':name'=> $_POST['name'], ':pwd'=>$_POST['pwd']));

    Si esto te parecio mejor que te parece evitar incluso usar Named Placeholders y solo indicar

    con signo de pregunta.

    ?1SELECTnombre FROMempleado WHEREid_empleado = ?

    Y para enviar los datos un mtodo an mas facil

    ?123

    $sql= 'SELECT nombre FROM empleado WHERE id_empleado = ?';$stmt= $conn->prepare($sql);$result= $stmt->execute(array($_POST['id']));

    De esta manera podemos ver algunos mtodos para enviar parametros a travs dePDO::prepare(). Los cdigos donde se utiliza esto estos ejemplos son:

    phpParameters-03.php

    ?

    1

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    15/24

    23456

    7891011121314151617

    1819202122232425262728

    2930313233343536373839404142434445464748

    $result = "";$conn = dbConnect();// If 'buscar' is in the array $_POST proceed to make the query.if(array_key_exists("search",$_POST)) {

    // Create the query with Named Placeholders$sql = 'SELECT nombre FROM empleado WHERE id_empleado = :id';// we have to tell the PDO that we are going to send values to

    the query$stmt = $conn->prepare($sql);// Now we bind the params$stmt->bindParam(':id',$_POST['id'], PDO::PARAM_INT);// Now we execute the query passing an array toe execute();$stmt->execute();// Extract the values from $result$result = $stmt->fetchColumn();if(empty($result)) {

    $result = "No se encontraron resultados !!";}

    } else{

    }

    ?>

    Query data sending an ID

    body {font-family: Arial, Helvetica, sans-serif;}

    Busqueda de Empleado

    Id de empleado:

    Nombre de Empleado:

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    16/24

    4950515253

    phpParameters-04.php

    ?1234567

    89101112131415161718

    1920212223242526272829303132333435363738

    Query data sending an ID

    body {font-family: Arial, Helvetica, sans-serif;}

    Busqueda de Empleado

    Id de empleado:

    http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    17/24

    3940414243

    4445464748495051

    Nombre de Empleado:

    Como podemos observar existe varias formas para obtener informacin enviandoparametros con PDO, mi forma personal de trabajar es con la versin simplificada, ya que

    me enfoco mas en logica que en estar poniendo nombre en los sql.

    Como ya es costrumbre dejo los cdigo fuente para que los descarguenaqu

    Crear Tabla HTML con ID y Mostrar

    Informacin (PHP,MySQL)

    Dandole seguimiento a los tutoriales que he realizado, ahora voy a mostrar como comollenar una tabla con el id y que ste tenga un enlace para que cuando el usuario le de click

    se despliegue la informacin.

    Para poder completar este tutorial primero debes de haber realizado el tutorialMtodoPDO::query para obtener resultados con MySQLpara saber como obtenerresultados de un query. Como se puede obervar en ese tutorial mostramos nuestro resultadoen una tabla. Para cumplir nuestro objetivo vamos crear un query string con el id delempleado en la tabla que hemos creado. Este query string lo vamos a formar en un taganchor a . Tambin tienes que haber completadoel tutorialMtodo PDO::prepare ObtenerResultados con Parametrospara saber como buscar un registro dado un valor.

    1.- Primero que nada debemos de tener nuestra tabla ya lista.

    http://behstant.com/downloads/download.php?file=4http://behstant.com/downloads/download.php?file=4http://behstant.com/downloads/download.php?file=4http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/downloads/download.php?file=4
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    18/24

    2.- Ahora tenemos que modificar un poco la creacin de nuestra tabla la cual tiene estecdigo:

    ?1234

    5678910

    Y lo vamos a cambiar por este otro

    ?1

    23456789

    http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    19/24

    10

    Y resultado de nuestra tabla va a ser los Id con un link hacia una pgina llamadasearchEmployee.php.

    Este es el cdigo completo que nos da el resultado anterior:

    ?123456789101112131415161718192021

    2223242526272829

    Query data sending an ID

    IDNombreEmailTelefono

    http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    20/24

    3031323334

    3536373839404142434445

    46474849

    3.-Ahora vamos a realizar la bsqueda de la informacin del empleado. Podemos ver queen el query string obtenemos la variable id con un valor, algo as:

    ?1searchEmployee.php?id=1

    Como la informacin es enviada a travs de un query string en php la vamos a obtener con$_GET, ya que la informacin no es enviada por una forma. Entonces con el siguientecdigo realizamos la busqueda y guardamos el valor en una variable $row.

    ?123456

    789101112131415

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    21/24

    1617181920

    21222324

    echo $error[2];*/if(empty($row)) {

    $result= "No se encontraron resultados !!";}

    }?>

    4.- Ahora para mostrar la informacin del empleado vamos a usar una forma. La razn porla que se usa una forma es por que en un siguiente post voy a mostrar como editar oeliminar un registro y sta va a ser la plantilla base.

    ?

    12345678910

    Id de empleado:

  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    22/24

    Si tienen dudas o comentarios sobre el post no duden en realizarlas. De todos modos lespongo el cdigo fuente de este turorialaqupara que puedan jugar con el

    Eliminar un registro con PHP

    (PDO,MySQL)Para finalizar la serie de tutoriales donde trabajamos con una tabla llamada empleado enesta ocacin voy a ensear como ingresar un registro (ya que los registros que tenemos losingresamos directamente por un query) y tambin como eliminar un registro. Paracompletar este tutorial debes de haber realizado los siguientes tutoriales, o tambin puedesir directo al cdigo e interpretarlo:

    1. Crear una conexin a MySQL con PDO2. Mtodo PDO::query para obtener resultados con MySQL

    3.

    Mtodo PDO::prepare Obtener Resultados con Parametros4.

    Crear Tabla HTML con ID y Mostrar Informacin (PHP,MySQL)

    Como anteriormente ya haba mencionado los mtodos para actualizar o buscar un registro,en esta ocacin vamos a reutilizar el cdigo que hemos estado trabajando y procederemos acrear una insercin y eliminar un registro. Primero que nada vamos a revisar la sintaxis deSQL para poder realizar nuestros queries.

    INSERT

    ?

    1INSERTINTOnombre_tabla(column1,column2,columnN)VALUES(value1,value2,valueN);

    DELETE

    ?

    1DELETEFROMnombre_tabla WHEREidentificador = n;

    Si ya sabes hacer queries con SQL puedes saltarte esta parte.

    Con la sintaxis de Insert podemos agregar un nuevo registro a la tabla que queramos, solotenemos que indicar a cual tabla queremos agregar un registro. Tambin debemos de tomaren cuenta las columnas donde queremos ingresar informacin, as mismo los valores debende coincidir con el nmero de columnas. En la sintaxis de Delete seleccionamos de cualtabla vamos a borrar un registro, sino se especifca cual registro se quiere borrar vamos aborrar todos los registros de esa tabla, por lo tanto es muy importante que indiquemos lallave primaria o el nombre de un registro que queramos borrar. Este tutorial es sobre el uso

    http://behstant.com/downloads/download.php?file=6http://behstant.com/downloads/download.php?file=6http://behstant.com/downloads/download.php?file=6http://behstant.com/blog/?p=635http://behstant.com/blog/?p=635http://behstant.com/blog/?p=333http://behstant.com/blog/?p=333http://behstant.com/blog/?p=413http://behstant.com/blog/?p=413http://behstant.com/blog/?p=475http://behstant.com/blog/?p=475http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=635http://behstant.com/blog/?p=635http://behstant.com/blog/?p=635http://behstant.com/blog/?p=635http://behstant.com/blog/?p=635http://behstant.com/blog/?p=635http://behstant.com/blog/?p=525http://behstant.com/blog/?p=475http://behstant.com/blog/?p=413http://behstant.com/blog/?p=333http://behstant.com/blog/?p=635http://behstant.com/blog/?p=635http://behstant.com/downloads/download.php?file=6
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    23/24

    de php para eliminar un registro por lo tanto no tratare el tema de SQL mas a fondo, sinembargo ya estoy preparando un tutorial de SQL.

    LGICA

    Siguiendo con el tutorial deCrear Tabla HTML con ID y Mostrar Informacin(PHP,MySQL)podemos observar que para actualizar un registro utilizamos el ID asociadoa la persona a editar . En la forma del cdigo tenemos dos botones, del de actualizar y el deeliminar. Nuestro propsito es saber cual de los botones es presionado, para este finutilizamos la funcin array_key_exists() con el cual buscamos el nombre del botn deeliminar. Una vez identificado que se presion el botn de eliminar trabajamos con el IDque vamos a eliminar.

    Ya con el ID podemos pasarlo como parmetro a nuestro Query y enlazarlo con PDO. Unavez enlazado el ID ejecutamos el Query y verificamos que no haya habido errores en laconsulta.

    EL CDIGO

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    if(array_key_exists('delete', $_POST)) {

    $sql= 'DELETE FROM empleado WHERE id_empleado = ?';

    $stmt= $conn->prepare($sql);

    $OK= $stmt->execute(array($_GET['id']));

    $error= $stmt->errorInfo();

    if(!$OK) {

    echo$error[2];

    }

    }

    Esto es todo el cdigo que utilizamos para eliminar un registro con PHP y PDO. Como sepuede observar no es mucho el cambio que se realiza en el cdigo que utilizamos en eltutorial de la actualizacin de un registro.

    Si tienen dudas sobre este tutorial o por alguna razn no pueden hacerlo funcionar puedo

    preguntarlo con mucho gusto. Y como siempre el cdigo lo pueden bajar aqu.

    http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525http://behstant.com/blog/?p=635http://behstant.com/blog/?p=635http://behstant.com/blog/?p=635http://behstant.com/blog/?p=525http://behstant.com/blog/?p=525
  • 5/21/2018 Crear Una Conexi n a MySQL Con PDO

    24/24

    http://behstant.com/blog/?p=635