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!
Gracias, me fue muy útil.
Me gustaMe gusta
¡Gracias por leer! 🙂
Me gustaMe gusta
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 gustaMe gusta
Muchas gracias, pronto más tutoriales de MySQLi 🙂
Me gustaMe gusta
Hola mucho gusto, me parece muy buena explicación.
Me gustaMe gusta
Muchas gracias, Armando 🙂
Me gustaMe gusta
Si es en Xamp para windows hay que editar el htacces o ese paso no se realiza?
Me gustaMe gusta
Se puede hacer sin problemas, pero no es tan necesario como lo sería en un entorno de producción.
Me gustaMe gusta
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 gustaMe gusta
Contacta con Hostinger, es extraño.
Me gustaMe gusta
Exelente he llevado dias con esto gracias
Me gustaMe gusta
Gracias por comentar 🙂
Me gustaMe gusta
Ostia no pude hacerlo está dificil,se me hiso un despiche
Me gustaLe gusta a 1 persona
Es lo más sencillo que hay en desarrollo web LAMP. Ni siquiera usa clases.
Me gustaMe gusta
Sinceramente, muy buen manual y muchas gracias por hacerlo
Me gustaMe gusta
siga haciendo mas tutoriales
Me gustaMe gusta