jueves, 3 de abril de 2014

Tutorial PHP - PDO : Insertar , Modificar, Eliminar y Listar registros





Para los que recien inician con PHP y han oido algo de PDO, bueno PDO es una libreria de PHP que nos permite abstraer ciertos conceptos de manejo de base de datos, las siglas de PDO significa PHP Data Objects (Objetos de Datos PHP), en resumidas utilizando PDO, nos permite evitar utilizar funciones propias de cada driver de base de datos, por ejemplo si usas MySQL dependiendo de la libreria mysql o mysqli, para conectarte usaras mysql_connect("localhost", "usuario", "contraseña") o $mysqli = new mysqli("localhost", "usuario", "contraseña", "basedatos"), de esto nos evita PHP PDO.

Conectar a una base de datos con PHP PDO


En PHP PDO utilizamos para conectarnos una cadena DSN, a través de ella definimos que motor usaremos, es algo similar al manejo en JAVA JDBC.

$con = new PDO('mysql:host=localhost;dbname=test', $usuario, $contraseña);

Cerrar conexion con una base de datos


$con = null;



Listar registros utilizando PHP PDO


$resultado=$con->query('SELECT * from MITABLA');

foreach($resultado as $registro){
 echo "$registro[0] | $registro[1] 
}

Esto nos dara algo similar a

Codigo | Descripcion
cod1 | producto 1
cod2 | producto 2
cod3 | producto 3

Utilizar prepared statements en PHP PDO


Una de las grandes utilidades de PHP PDO, es el uso de prepared statements, un prepared statement, es una sentencia que ha sido preformateada o preparada antes de su ejecución, utilizando prepared statements agrega una capa extra de seguridad a nuestras aplicaciones, sobre todo para evitar inyecciones sql.

Insertar registros con prepared statements en PHP PDO


$sentencia = $con->prepare("INSERT INTO Producto (codigo, descripcion) VALUES (:codigo, :descripcion)");
$sentencia->bindParam(':codigo', $codigo);
$sentencia->bindParam(':descripcion', $descripcion);

// insertar una fila
$codigo = 'cod123';
$descripcion = "Nuevo Producto";
$sentencia->execute();

// insertar otra fila con diferentes valores
$codigo = 'cod456';
$descripcion = "Otro Producto";
$sentencia->execute();



Modificar o Actualizar registros con prepared statements en PHP PDO


$sentencia = $con->prepare("UPDATE Producto SET descripcion=:descripcion WHERE codigo:=codigo");
$sentencia->bindParam(':codigo', $codigo);
$sentencia->bindParam(':descripcion', $descripcion);

$codigo = 'cod123';
$descripcion = "Nuevo Producto 2";
$sentencia->execute();


Ejecutar Procedimientos Almacenados en PHP PDO


Otra gran ayuda de PHP PDO, es la ejecucion de procedimientos almacenados, para este ejemplo los parametros será pasados de acuerdo a su posicion.

$sentencia = $con->prepare("CALL sp_calcular_ventas_por_categoria_mes(?, ?)");
$sentencia->bindParam($mes);
$sentencia->bindParam($categoria);


Ejecutar una consulta LIKE con Prepared Statements en PHP PDO


Lo incluyo como un punto aparte por si a alguien le aparece un error al querer hacer una consulta similar.

Esta es la forma correcta de hacerlo

$sentencia = $con->prepare("SELECT * FROM Producto WHERE descripcion LIKE ? ");
$sentencia->bindParam("%$texto_buscado%");
$sentencia->execute();
$resultados=$sentencia->fetchAll();

Capturar errores en PHP PDO


Para capturar los errores se puede utilizar Try Catch, similar a como se usa en JAVA o .Net

try {
    $con = new PDO('mysql:host=localhost;dbname=test', $usuario, $contraseña);
    /*
      MAS CODIGO
    */
    $con = null;
} catch (PDOException $e) {
    print "Hubo un error: " . $e->getMessage() . "
";
    die();
}



Como siempre espero les sea de utilidad en el manejo de PHP PDO

3 comentarios:

  1. Interesante forma de hacer conexiones a MySql, gracias por el aporte, estaré al pendiente de los siguientes.
    Saludos cordiales

    ResponderEliminar
  2. Gracias por el aporte. Tengo una consulta. Si quiero actualizar de manera masiva todos los registros de la tabla. Cómo sería ese bucle con PDO?
    Gracias.

    ResponderEliminar

 
Powered by Blogger