MySQLi
PHP hace uso de esta extensión mejorada para poder comunicarse con las bases de datos, ya sean MySQL
(4.1 o superior) o MariaDB.
Cualquier consulta que queramos hacer a una base de datos necesitaremos hacer uso de la extensión mysqli()
Veamos como conectarnos con una base de datos a través del código PHP
Recuperando datos de un BD
Ahora que ya sabemos cómo conectarnos a una base de datos alojada en nuestro servidor, lo que necesitamos
saber es cómo recuperar datos almacenados en la base de datos.
Vamos a recuperar esos datos para ver de qué forma se hace con PHP.
PHP DATA OBJECTS
De la misma manera que hemos visto con mysqli, PHP Data Objects (o PDO) es un driver de PHP que se utiliza
para trabajar bajo una interfaz de objetos con la base de datos.
De igual manera que pasaba con los objetos en PHP nativos, en la interfaz de MySQL la cosa cambia la hora de
conectarnos con una base de datos.
$conexion = new PDO('mysql:host=localhost; dbname=dwes', 'dwes', 'abc123');
Además, con PDO podemos usar las excepciones con try catch para gestionar los errores que se produzcan en
nuestra aplicación, para ello, como hacíamos antes, debemos encapsular el código entre bloques try / catch.
En primer lugar, creamos la conexión con la base de datos a través del constructor PDO
pasándole la información de la base de datos.
En segundo lugar, establecemos los parámetros para manejar las excepciones, en este
caso hemos utilizado:
● PDO::ATTR_ERRMODE indicándole a PHP que queremos un reporte de errores.
● PDO::ERRMODE_EXCEPTION con este atributo obligamos a que lance excepciones,
además de ser la opción más humana y legible que hay a la hora de controlar
errores.
Cualquier error que se lance a través de PDO, el sistema lanzará una PDOException.
SENTENCIAS PREPARADAS
Se trata de sentencias que se establecen como si fueran plantillas de la SQL que vamos a lanzar, aceptando
parámetros que son establecidos a posteriori de la declaración de la sentencia preparada.
Las sentencias preparadas evitan la injección de SQL (SQL Injection) y mejoran el rendimiento de nuestras
aplicaciónes o páginas web.
$sql = "INSERT INTO Clientes VALUES (?, ?, ?, ?)";
Cada interrogante es un parámetro que estableceremos después, unas cuantas líneas más abajo.
Una vez tenemos la plantilla de nuestra consulta, debemos seguir con la preparación junto con 3 métodos más
de PHP para su completa ejecución:
● prepare: prepara la sentencián antes de ser ejecutada
● bind: el tipo de unión (bind) de dato que puede ser mediante ' ? ' o ' :parametro '
● execute se ejecuta la consulta uniendo la plantilla con las variables o parámetros que hemos
establecido.
bindParam
bindParam vs bindValue
Utilizaremos bindValue() cuando tengamos que insertar datos sólo una vez, en cambio, deberemos usar
bindParam() cuando tengamos que pasar datos múltiples, como por ejemplo, un array.
Insertando registros
A la hora de insertar registros en una base de datos, debemos tener en cuenta que en la tabla puede haber
valores autoincrementados. Para salvaguardar ésto, lo que debemos hacer es dejar ese cambpo
autoincrementado vacío, pero a la hora de hacer la conexión, debemos recuperarlo con el método lastInsertId().
Consultando registros
A la hora de recuperar los resultados de una consulta, bastará con invocar al método PDOStatement::fetch para
listar las filas generadas por la consulta.
Pero debemos elegir el tipo de dato que queremos recibir entre los 3 que hay disponibles:
● PDO::FETCH_ASSOC: array indexado cuyos keys son el nombre de las columnas.
● PDO::FETCH_NUM: array indexado cuyos keys son números.
● PDO::FETCH_BOTH: valor por defecto. Devuelve un array indexado cuyos keys son tanto el nombre de
las columnas como números.