Conectando a una base de datos MySQL desde PHP
Tags: php, mysql, pdo, database
Published: 2020-09-01 02:03:05

En este tutorial veremos cómo conectar a una base de datos MySQL desde PHP usando el driver de conección PDO.

Primero debemos asegurarnos de tener *MySQL* instalado y corriendo en nuestra máquina, generalmente se lo hace desde el panel de control de *XAMMP* en caso de que lo estés usando.

Luego creamos la base de datos, esto se lo puede realizar desde alguna herramienta UI como phpMyAdmin o directamente desde  MySQL Command-Line Client (Cliente de línea de comandos de MySQL) como se muestra a continuación.

```
> create database covid_bolivia;
> use covid_bolivia;
```
Con `use covid_bolivia` seleccionamos la base de datos para trabajar.
Usamos el siguiente script para crear la tabla y llenar unos cuantos datos:

```sql
CREATE TABLE departamento (
  id int AUTO_INCREMENT,
  nombre varchar(127) NOT NULL,
  casos int,
  primary key(id)
);
INSERT INTO departamento (nombre, casos) VALUES
('La Paz', 754),
('Oruro', 260),
('Potosí', 183),
('Cochabamba', 1097),
('Chuquisaca', 39),
('Tarija', 58),
('Santa Cruz', 8676),
('Beni', 2511),
('Pando', 65);
```
Con este script estamos creando una tabla de datos, que consta de: `id` de tipo auto incremental, `nombre` de tipo varchar (string de 127 carácteres) y `casos` de tipo entero. Luego llenamos la tabla con algunos datos, nótese que no es necesario especificar la columna `id` dado que es auto incrementable.

### Conexión con MySQL
Creamos un archivo `config.php` donde definimos las variables para realizar la conección:

```php
<?php
  $host="locahost";
  $user="root";
  $password="";
  $database="covid_bolivia";
?>
```
Por defecto, el superusuario es `root` con el password vacío.
En nuestro archivo principal (index.php) vamos a realizar la conección y hacer una consulta a nuestra base de datos:

```php
<?php
require_once 'config.php';
$conectionString = "mysql:host=$host;dbname=$database";
$pdo = new PDO($conectionString, $user, $password);
$results = $pdo->query("SELECT 'Hola' as saludo;");
$result1 = $results->fetch();
var_dump($result1);
?>
```
Primero requerimos el archivo de configuración `require_once 'config.php';`, realizamos nuestra conección con el driver PDO y creamos una nueva instancia de este, hacemos una prueba de conexión realizando una pequeña consulta.
Si todo sale bien y abrimos nuestro `index.php`, obtendremos lo siguiente:
![Prueba de conexión](https://dev-to-uploads.s3.amazonaws.com/i/32o4ig05orwnxhfqysxn.png)
Este resultado corresponde a la siguiente consulta SQL.
![Consulta SQL](https://dev-to-uploads.s3.amazonaws.com/i/rgdhy9yu3iubienrc2f5.png)

### Obteniendo Datos
Una vez probada la conexión, podemos continuar con los datos de nuestra tabla, modificamos nuestro `index.php`.
```php
<?php
require_once 'config.php';
$conectionString = "mysql:host=$host;dbname=$database";
$pdo = new PDO($conectionString, $user, $password);
$results = $pdo->query("SELECT * FROM departamento;");
$result1 = $results->fetch();
var_dump($result1);
$result2 = $results->fetch();
var_dump($result2);
?>
```
Una consulta del tipo select, consta de 2 partes; la primera, donde realizamos la consulta `$pdo->query("SELECT...")` y obtenemos los resultados, y la segunda donde vamos sacando los datos de estos resultados `$results->fetch();`. En el ejemplo obtenemos los resultados pero solo obtenemos los primeros 2 datos, podemos verificarlo abriendo `index.php`.
![Primeros 2 resultados](https://dev-to-uploads.s3.amazonaws.com/i/3fw4975n561g1vnjd6mk.png)
También podemos obtener todos los resultados de nuestra consulta reemplazando `$results->fetch();` por `$results->fetchAll();`.
```php
$departamentos = $results->fetchAll();
var_dump($departamentos);
```
Cuyo resultado será:
![Todos los resultados](https://dev-to-uploads.s3.amazonaws.com/i/gksuuk8d9qfkk2k44g6m.png)
Como podemos ver, esta vez obtenemos los 9 resultados.
También tenemos la opción de "limpiar" los resultados, pues si observamos; los datos vienen duplicados, indexados por números y por claves. Usando la opción `PDO::FETCH_ASSOC` obtenemos resultados más limpios, el uso es el siguiente:
```php
$departamentos = $results->fetchAll(PDO::FETCH_ASSOC);
var_dump($departamentos);
```
Ahora los resultados se muestran de la siguiente manera:
![Resultados limpios](https://dev-to-uploads.s3.amazonaws.com/i/bgjziud6jkursbmp6akp.png)