[TUTORIAL] TRABAJANDO CON PDO (PHP Data Objects)

Iniciado por Shell Root, 20 Junio 2011, 06:21 AM

0 Miembros y 1 Visitante están viendo este tema.

Shell Root

TRABAJANDO CON PDO
PHP Data Object



CONTENIDO

         1. CONEXIÓN A LA BASE DE DATOS.
         2. EJECUCIÓN DE QUERYS
              2.1 DIRECTA.
              2.2 RETORNO DE DATOS.
              2.3 MANEJO DE DATOS.
                   2.3.1 ARRAY
                        2.3.1.1 NUMÉRICO.
                        2.3.1.2 ASOCIATIVO.
                        2.3.1.3 NUMÉRICO y ASOCIATIVO.
                   2.3.1
                   2.3.1
         3.
         4.
         5.
         6.
         7.
         ∞. BIBLIOTECA DE CÓDIGO.

Fecha ultima actualización: 20 de Junio de 2011
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Shell Root

#1
CONEXIÓN A LA BASE DE DATOS


         Principalmente lo que debemos hacer es realizar una simple conexión a cualquier base de datos, una de las ventajas y caracteristicas que tiene PDO es qué tiene el mismo string de conexión, -por así decirlo-, para cualquier motor de base de datos que está soporta. Aquí veremos algunas de estás conexiones en MySQL y PostgreSQL, para ver la diferencia y la simplicidad.

Con MySQL y PostgreSQL nos conectábamos de la siguiente forma,

Código (php) [Seleccionar]
# MySQL
mysql_connect("$host", "$usuario", "$contraseña");
mysql_select_db("$baseDatos");

# PostgreSQL
pg_connect("host = $host dbname = $baseDatos user = $usuario password = $contraseña");


Ahora con PDO lo hacemos general de la siguiente forma, -sólo cambiaría el driver de conexión-,

Código (php) [Seleccionar]
#MySQL
$conn = new PDO("mysql:host = $host; dbname = $baseDatos", $usuario, $contraseña);

# PostgreSQL
$conn = new PDO("pgsql:host = $host port = $puerto dbname = $baseDatos", $usuario, $contraseña);


Notamos que utiliza la misma estructura para la conexión en cualquiera de los 2 motores de base de datos.

PD: Por alguna extraña razón en la variable de contraseña al ponerla sin la ñ, el foro lo agrega #FAIL!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Shell Root

EJECUCIÓN DE QUERYS

         En la ejecución de querys se pueden definir 2 categorías. DIRECTAS, que es cuando se realiza un INSERT, UPDATE y sabemos que nunca devolverá un dato... y con RETORNO DE DATOS, que es cuando de realiza un SELECT, donde si sabemos que tendremos que manejar registros devueltos por la consulta.

Antes de mirar como se realiza esta acción con PDO miremos como se realizaba con los 2 motores de base de datos que tenemos de ejemplo.
Código (php) [Seleccionar]
# MySQL
$query = mysql_query( $sql, $cnn );

# PostgreSQL
$query = pg_query( $cnn, $sql );



DIRECTA
         Esta es la forma en la que no tendremos interacción de ninguna clase con datos, sólo se ejecutará la query y los posibles valores de retorno sería VERDADERO o FALSO, para identificar el estado de la ejecución de la query. Se realizaría de la siguiente forma,
Código (php) [Seleccionar]
$cnn->exec("INSERT INTO usuario (id, cedula, nombre) VALUES(1, '1037610909', 'Alex');");

Para este caso podríamos realizar la validación para ver si se ejecuto o no, la query. Así,
Código (php) [Seleccionar]
$query = $cnn->exec("INSERT INTO usuario (id, cedula, nombre) VALUES(1, '1037610909', 'Alex');");
if ($query !== FALSE){
   # ...
}


RETORNO DE DATOS
         Esta es la forma en la que sí tendremos interacción de con datos que devuelve la consulta, para este caso tendríamos valores de retorno. Se realizaría de la siguiente forma,
Código (php) [Seleccionar]
$query = $cnn->query("SELECT id, cedula, nombre FROM usuario;");

En el próximo apartado veremos como se manejan los datos de retorno de la query.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Shell Root

#3
MANEJO DE DATOS

         Ahora veremos somo sería la forma en que se retornarían los datos, existen 3 opciones fundamentales para esto, NUMÉRICA, ASOCIATIVA, NUMÉRICA y ASOCIATIVA, cada una de está con una función diferente.

Supongamos que tenemos una base de datos con una tabla de USUARIO con los campos de ID, CEDULA y NOMBRE. En cuya tabla existen un registro con los siguientes valores,

Código (sql) [Seleccionar]
mysql> SELECT id, cedula, nombre FROM usuario;
+----+------------+--------+
| id | cedula     | nombre |
+----+------------+--------+
|  1 | 1030010000 | Alex   |
+----+------------+--------+
1 row in set (0.00 sec)


NUMÉRICA
         Esta opción lo que hace es identificar el campo por medio de identificador que en este caso es un número. Por ejemplo, teniendo la base de datos anterior, realicemos un SELECT básico, así.
Código (php) [Seleccionar]
$sql = "SELECT id, cedula, nombre FROM usuario;";
$query = $conn->query($sql);
while( $fila = $query->fetch(PDO::FETCH_NUM) ){
  $datos[] = $fila;
}


Al mostrar el array deberíamos obtener los siguientes resultados,
Código (php) [Seleccionar]
Array( [0] => Array( [0] => 1 [1] => 1030010000 [2] => Alex ) )


ASOCIATIVA
         Esta opción lo que hace es identificar el campo por medio de identificador que en este caso sería el nombre del campo. Siguiendo el ejemplo anterior,
Código (php) [Seleccionar]
$sql = "SELECT id, cedula, nombre FROM usuario;";
$query = $conn->query($sql);
while( $fila = $query->fetch(PDO::FETCH_ASSOC) ){
  $datos[] = $fila;
}


Al mostrar el array deberíamos obtener los siguientes resultados,
Código (php) [Seleccionar]
Array( [0] => Array( ['id'] => 1 ['cedula'] => 1030010000 ['nombre'] => Alex ) )


NUMÉRICA y ASOCIATIVA
         En esta opción se unen las dos funciones anteriores en uno. Miremos el ejemplo en base con el ejemplo anterior,

Código (php) [Seleccionar]
$sql = "SELECT id, cedula, nombre FROM usuario;";
$query = $conn->query($sql);
while( $fila = $query->fetch(PDO::FETCH_BOTH) ){
  $datos[] = $fila;
}


Al mostrar el array deberíamos obtener los siguientes resultados,
Código (php) [Seleccionar]
Array( [0] => Array( ['id'] => 1 [0] => 1 ['cedula'] => 1030010000 [1] => 1030010000 ['nombre'] => Alex [2] => Alex ) )


NOTA GENERAL: El primer ARRAY es de los registros de la consulta y el segundo ARRAY, es donde tendrá los valores.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.