PDO prepared statements: Resumen de uso

 

Como ya indiqué en mi artículo anterior, es fundamental saber cómo utilizar PDO combinado con Sentencias Preparadas para realizar correctamente y de forma segura consultas con nuestra base de datos MySQL. Uno de los motivos para usar PDO es porque ya PHP ha declarado obsoletas la extensión mysql original, aunque tenemos la opcion de usar también la extensión MySQLi, yo personalmente prefiero usar PDO. A continuación dejo un resumen de cómo se puede usar tanto para SELECT, como para INSERT y UPDATE.

PDO también se pueden usar con Transacciones, pero eso lo veremos de forma extensa mas adelante.

Conexion con Base de Datos:

$conexion = new PDO("mysql:host=localhost;dbname=miblog","miblogadmin",
"mipassword",array(PDO::ATTR_PERSISTENT => FALSE, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES \'UTF8\'"));

Para cualquier tipo de consultas la inicialización del objeto se hace del mismo modo. En cuanto a las constantes que pasamos, lo importante es definir la codificación de caracteres que estemos utilizando. Si no lo hacemos correctamente obtendremos caracteres extraños.

Listado de constantes: Manual PHP

Consultas SELECT

$query = "SELECT 
 `nombre`,`apellidos` 
FROM 
 `alumnos` WHERE `curso` = ? 
AND 
`carrera` = ? ";
$psLink = $conexion->prepare($query);$psLink->bindValue(1, "2016");
$psLink->bindValue(1, "Ingenieria");
$psLink->execute();
$resultado = $psLink->fetchAll(); 
//$resultado es un array que recorreremos con un foreach.foreach($resultado as $re)
{
       //operaciones con los datos
}

  //Otra forma en vez de fetchAll():
while($re = $psLink->fetch()){
  //operaciones con los datos
}

fetchAll: Es bastante más rápido que fetch, pero consume mas memoria. Hay que tener cuidado con gran cantidad de datos. Para optimizar un poco el consumo de memoria podemos pasar PDO::FETCH_ASSOC  asi:

$resultado = $psLink->fetchAll(PDO::FETCH_ASSOC);

fetch: Quizás sea más sencillo para adaptarlo al antiguo mysql_fetch_array. Hay situaciones en que es recomendable por el ahorro en memoria con gran cantidad de datos, ya que se reutiliza la variable ($re).

 

Consultas INSERT

$query = "INSERT INTO `alumnos`(`id_alumno`, `nombre`, `apellidos`, `curso`, `carrera`) VALUES ( '',  ?,  ?, ?, ?)";$psLink = $conexion->prepare($query);$psLink->bindValue( 1, $nombre);
$psLink->bindValue( 2, $apellidos);
$psLink->bindValue( 3, $curso);
$psLink->bindValue( 4, $carrera);
$psLink->execute();

 

Consultas UPDATE

$query = "UPDATE `alumnos` SET `curso` = ?  WHERE `id_alumno` = ? ";
$psLink = $conexion->prepare($query);
$psLink->bindValue( 1, $curso);
$psLink->bindValue( 2, $id_alumno);
$psLink->execute();

 

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *