Está en la página 1de 16

Conectar con MySQLi a base de datos

Posted onjulio 20, 2015 by Rocanrol

En esta ocasión mostraré cómo conectarse una base de datos MySQL con MySQLi en PHP. Aunque lo cierto es que es algo
muy básico, puede resultar un poco complicado hacer una conexión “decente” cuando uno empieza en este mundo de PHP y
bases de datos.
Yo uso Hostinger con PHP 5.5. La función “MySQLi” (mysql improved) se introdujo en PHP 4.1, así que asegúrate de
poseer una versión de PHP 4.1 o superior en tu servidor.
¿Cómo conectar con MySQL?
La base de datos
Como ya dije, yo uso Hostinger y me proveen de un creador de bases de datos con la posibilidad de administrar la BB.DD con
PHPMyAdmin (cosa que en este tutorial no será necesario). Así que lo que haré es crear una base de datos con el nombre “tuto”
y usuario con nombre “mmv“. Le doy como contraseña “0123456“.
Preparando los archivos
Lo primero que debemos hacer es crear un index.php y un archivo que incluiremos cada vez que queramos hacer una conexión a
la base de datos (yo lo llamé conexión.php). También debemos crear un archivo de configuración (.ini) donde alojaremos los
datos de conexión.

El archivo de configuración se puede crear con un bloc de notas, guardándolo con “nombre.ini”. En mi caso, le puse como
nombre “config.ini”.
Ahí, debemos escribir lo siguiente:

[database]
username = NOMBREDEUSUARIO
password= CONTRASEÑA
dbname = NOMBREDELABASEDEDATOS
Es decir, creamos un Array donde el valor de “username” sea el nombre de usuario y contraseña que elegimos al crear la base de
datos, y “dbname” es el nombre de la base de datos.

Mi configuración es esta:
Claramente puede variar de un hosting a otro, o si estamos en localhost (p.ej. conectados con XAMPP), etc.
También puedes alterar el nombre de la configuración. Que en lugar de “username” se llame “usuario”, que “password” sea
“clave” (no recomiendo utilizar eñes ni tildes) o que en lugar de “dbname” sea “nombredelabase”… En este caso, yo seguiré
trabajando sobre esos nombres.

Creando la conexión
En nuestro archivo “conexion.php” debemos crear una variable que tome los datos de nuestro “config.ini”, después hacer la
conexión y comprobar el estado de la misma.
Para ello, debemos decirle al documento que vamos a ingresar código PHP. Esto se hace de la siguiente manera:
<?php
?>
Este código debe ir en el documento, el cual debe estar totalmente vacío. Las etiquetas HTML (doctype, html, head, body, etc.)
que puedan generar algunos editores de texto (como Dreamweaver) deben ser eliminadas.
A continuación debemos crear una variable con el valor parse_ini_file y la ruta del archivo “.ini” para que PHP tome los datos de
la conexión. Recuerda siempre poner la ruta correcta para el archivo, o de lo contrario no podrá realizarse la
conexión. Yo, como tengo el “conexion.php” y el “config.ini” en la misma carpeta, debo escribir simplemente el nombre del
archivo de configuración, así:
<?php
// Carga la configuración
$config = parse_ini_file('config.ini');
?>
El nombre de la variable (config) da igual, pero debemos usar siempre el mismo para obtener los datos del array. Esto se explica
más adelante.
Ahora debemos crear una variable que almacene la conexión con MySQLi, de esta manera:

<?php
// Carga la configuración
$config = parse_ini_file('config.ini');

// Conexión con los datos del 'config.ini'


$connection = mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']);
?>
La función mysqli_connect toma los valores de “config.ini” como un array, y los comprende así:
localhost, usuario, contraseña, nombre de la BD
 ‘localhost’ (el servidor); va con dos comillas simples porque es una instrucción “en texto plano”, o sea, que no toma el
valor de ninguna otra variable.
 $config[‘valor’] (array); dentro de la variable config (o sea, dentro del “config.ini”) tenemos diferentes valores, y cada
valor tiene un nombre: “username”, “password” y “dbname”. Para obtener cada valor, hay que poner el nombre de la
variable (por ejemplo, username). Esta no llevan comillas.
Una vez creada la conexión, debemos comprobar si es correcta o falla. Para eso, bastará con una simple condicional.
<?php
// Carga la configuración
$config = parse_ini_file('config.ini');

// Conexión con los datos del 'config.ini'


$connection = mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']);

// Si la conexión falla, aparece el error


if($connection === false) {
echo 'Ha habido un error <br>'.mysqli_connect_error();
} else {
echo 'Conectado a la base de datos';
}
?>
Entonces; comprobamos si la conexión es falsa, y en caso de serlo, debe mostrar un error. En caso de no serlo, conectará. Para el
ejemplo he colocado un else que indica que, si la conexión está bien, debe mostrar un mensaje diciendo “Conectado a la base de
datos”, pero realmente no debería haber un else en la condicional (o lo mostrará cada vez que alguien acceda a la página).
El uso de === en la condición indica que debe ser idéntico a false, y no igual (que sería ==). Más información al respecto aquí.
Nuestro archivo “conexion.php” debe ser algo como esto:
Conectando…
Ahora debemos añadir la conexión a nuestro archivo “index.php”. Esto debemos hacerlo cada vez que necesitemos datos de
la BB.DD, y lo único necesario es un require en PHP. Esto lo pondremos encima de la declaración de DOCTYPE de HTML.
<?php
require('conexion.php');
?>

En mi caso, Dreamweaver me mostrará qué fichero está incluido en cada archivo que lo requiera (ya sea PHP, CSS, JS, etc.).
Ahora subiré los archivos por FTP, y acá tenemos el resultado:
Para comprobar que muestra los errores cuando la conexión falla, como ejemplo, voy a poner una contraseña incorrecta en
“config.ini” (añado un cero al final) y lo subo de nuevo al hosting.

Aquí vemos dos errores: uno que muestra por defecto PHP (el que está arriba de “Ha habido un error”), y otro que nosotros le
pedimos que muestre (el que está abajo).

Seguridad
Si accedemos a la ruta del “config.ini”, es probable que nos encontremos la configuración para acceder a la base de datos (en
texto plano), lo cual es un fallo de seguridad muy grave.
Para evitar esto, debemos modificar el archivo .htaccess que nos provee nuestro hosting.
Con FileZilla podemos acceder a este archivo, y haciendo click en “Ver/Editar” se nos creará una copia temporal del archivo
en nuestro sistema para poder, valga la redundancia, verlo y editarlo.

A mí se me abre en Dreamweaver, pero se puede configurar con qué programa abrir los ficheros, yendo a “Edición >
Opciones…”, y en la sección “Edición de archivo” elegimos el.exe de nuestro editor haciendo click en “Usar editor
personalizado”.
Esa es la configuración básica que me provee el .htaccess de Hostinger por defecto.
Lo único que voy a añadirle en este caso son las siguientes líneas para denegar el acceso a los “.ini” y otras extensiones (como
cualquier fichero que empiece por “.ht” (.htaccess y.htpasswd), los “.phps”, los “.log”, etcétera), enviando las peticiones a
un HTTP 403 Forbidden.
# Do not remove this line or mod_rewrite rules and search engine friendly URLs will stop working
RewriteBase /
RewriteEngine on

<FilesMatch "^\.(ht)|\.(ini|phps|log|sh|bak|1|old|swp)$|(\.*~)$">
Order Allow,Deny
Deny from all
</FilesMatch>

Y así queda mi fichero:

Ahora lo guardo en la raíz de mi carpeta local, y lo subo por FTP a la raíz de “public_html”.
Como no tengo configuradas las páginas de error, no puedo ver el 403 (me redirecciona a un 404 de Hostinger), pero acá se
aprecia que el .htaccess hace su trabajo:
Hecho.

Ya estamos conectados a la base de datos y con seguridad. Al menos de momento (nunca se sabe quién intentará efectuar
un XSS o una inyección SQL, o algo así).
Conclusión:
Si estás empezando con PHP + MySQL, estos son los primerísimos pasos.
Probablemente haga una secuela de este tipo de entradas, tratando con PHP, SQL, PHPMyAdmin, etc.

Espero que el tutorial haya sido de utilidad. Nos leemos, ¡saludos!