Conectar con MySQLi a base de datos

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!

 

16 comentarios

  1. Developer Ranking · agosto 31, 2015

    Gracias, me fue muy útil.

    Me gusta

  2. pablo · septiembre 13, 2015

    exelente hermano, ojala puedas hacer mas tutos y ojala sea de como almacenar,mostrar datos recopilados en una database yaque no hay mucho de mysqli(explicado de esta forma) en la internet

    Me gusta

  3. armando · febrero 24, 2016

    Hola mucho gusto, me parece muy buena explicación.

    Me gusta

  4. Alonso Buzano · marzo 12, 2016

    Si es en Xamp para windows hay que editar el htacces o ese paso no se realiza?

    Me gusta

    • Rocanrol · marzo 12, 2016

      Se puede hacer sin problemas, pero no es tan necesario como lo sería en un entorno de producción.

      Me gusta

  5. Carlos Cuahtemoc Morales Cruz · abril 10, 2016

    no me funciona en la pagina hostinger ma conectar con mi base de datos
    me marca este error:
    Warning: mysqli_connect(): (28000/1045): Access denied for user ‘u572860155_temo’@’10.2.1.24’ (using password: YES) in /home/u572860155/public_html/proyectobien7mares/login/acceso_db.php on line 6
    Ha habido un error
    Access denied for user ‘u572860155_temo’@’10.2.1.24’ (using password: YES)Estás accediendo a una página restringida, para ver su contenido debes estar registrado.

    Me gusta

  6. buddy · abril 12, 2016

    Exelente he llevado dias con esto gracias

    Me gusta

  7. doblevidarp · diciembre 16, 2016

    Ostia no pude hacerlo está dificil,se me hiso un despiche

    Le gusta a 1 persona

    • Rocanrol · diciembre 16, 2016

      Es lo más sencillo que hay en desarrollo web LAMP. Ni siquiera usa clases.

      Me gusta

  8. Jose Angel · enero 15, 2017

    Sinceramente, muy buen manual y muchas gracias por hacerlo

    Me gusta

  9. kanacazcko · septiembre 3, 2017

    siga haciendo mas tutoriales

    Me gusta

Deja un comentario