Conectarse mediante PDO con Mysql , PostgreSQL y Oracle

PDO (PHP Data Objects) es una librería de acceso a bases de datos para PHP.

Desde PHP 5.1 viene disponible PDO por defecto.

PDO sirve para poder realizar acciones(insertar, actualizar, eliminar…) a diferentes bases de datos en PHP.

Conectarse mediante PDO te da facilidades como usar las mismas sentencias para trabajar con diferentes bases de datos sin entrar en peculiaridades específicas como por ejemplo el siguiente caso de conexión de MySQL.

Caso 1: conexión Mysql:

mysql_connect(“localhost”, “root”, “passwod”) or die(mysql_error()) ;

Caso 2: conexión PDO con Mysql:

$conn = new PDO(‘mysql:host=localhost;dbname=demo’, $usuario, $password);

Comprobamos que en el caso 1 MySQL está usando una instrucción  “mysql_connect” única de aplicación MySQL y lo mismo con PostgreSQL u Oracle, cada una tiene sus instrucciones propias.

Como vemos en el caso 2 hemos conectado mediante PDO y hemos usado una instrucción que nos servirá también para otras bases de datos como veremos más adelante del tutorial.

Usar PDO puede ahorrarte mucha faena ya que usa sentencias comunes para todas las bases de datos pero esto no te garantiza que a la hora de trabajar con diferentes Bases de datos se usen las mismas sentencias para la misma funcionalidad, un caso interesante es cuando se quiere almacenar una imagen en nuestra base de datos el mecanismo de inserción y lectura de dicha imagen puede ser distinto ya que por ejemplo Oracle no funciona de la misma manera que MySQL, a eso me refería con pequeñas peculiaridades por lo tanto las sentencias son comunes pero la forma de trabajar con ellas no.

Podemos ver un ejemplo aquí

En los pasos siguientes veremos cómo adaptamos nuestras conexiones dependiendo de nuestro gestor de BD, crearemos una nueva conexión PDO por cada gestor que vayamos a usar en nuestra aplicación.

Conexión Mysql PDO:

try{
//insertamos el usuario
$usuario = xxx;
//insertamos la contraseña
$password = xxx;
/*Incluimos el tipo de base de datos que queremos usar, en este caso MySQL y en dbname ponemos el nombre que tiene nueva base de datos. */
$conn = new PDO('mysql:host=localhost;dbname=xxx', $usuario, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo "ERROR: " . $e->getMessage();
}

Conexión PostgreSQL PDO:

try{
$usuario = xxx;
$password = xxx;
/*En este caso el tipo es pgsql, además le indicamos el puerto */
$conn = new PDO('pgsql:host=localhost;port=5432;dbname=xxx', $usuario, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
echo "ERROR: " . $e->getMessage();
}

Conexión Oracle PDO:

try
{
$usuario = xxx;
$password = xxx;
$nombredb = xxx;
//para oracle el tipo es oci
$conn =new PDO("oci:dbname".$nombredb,$usuario,$password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch ( PDOException $e )
{  echo "Error: ".$e->getMessage( );  }

Sentencias con PDO:

INSERTAR CON PDO:

Una vez realizada la conexión realizaremos una sentencia para insertar en la base de datos.

/* la variable $conn tiene almacenada la configuración de la base de datos y la sentencia prepare la sentencia sql para posteriormente ser ejecutada */
$sql = $conn->prepare("INSERT INTO nombretabla (elemento1 ,elemento2, elemento3) VALUES('$elemento1','$elemento2,'$elemento3)");
//ejecuta la sentencia sql
$sql->execute();

REALIZAR UNA CONSULTA CON PDO:

$query = "select elemento1, elemento2 from nombretabla where elemento2=8";
$sql = $conn->prepare($query);
$sql->execute();

Como podemos ver es muy similar a las sentencias SQL clásicas, pero ahora deberemos usar la sentencia prepare(); y execute(); para las operaciones básicas como insertar, borrar, actualizar, insertar…

Conclusiones:

-Cuesta menos migrar de una base de datos a otra.

-Las últimas versiones de PHP ya trae consigo esta librería.

-Manejar mejor los errores (orientado a objetos).

-Buen rendimiento.

-Código con buena apariencia.

Iván Martínez

Ingeniero Informático apasionado por el mundo del desarrollo WEB. Me gusta caminar por este mundo lleno de tecnologías y día a día aprender cosas nuevas como el doctor Frankenstein ¡dadme cosas para experimentar!

Deja un comentario

Tu dirección de correo electrónico no será publicada.