Você está na página 1de 16

 

TUTORIAL, DESARROLLO WEB

Conectar con MySQLi a base de datos


 julio 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!

Comp á r t e lo:

 Twitter  Facebook  Google

Cargando...

Relacionado
PHP configuración MySQL MySQLi conectar conectar a base de datos

base de datos BB.DD SQL require config.ini FileZilla .htaccess 403 HTTP 403

denegar acceso a .ini fichero parse_ini_file localhost conexión username

password dbname database

CERTIFICADOS SSL GRATUITOS

BÚSQUEDA INSTANTÁNEA CON AJAX, PHP Y MYSQL

15 comments

Developer Ranking · agosto 31, 2015

Gracias, me fue muy útil.

Responder

Rocanrol · septiembre 1, 2015

¡Gracias por leer!


Responder

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

Responder

Rocanrol · septiembre 19, 2015

Muchas gracias, pronto más tutoriales de MySQLi

Responder

armando · febrero 24, 2016

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

Responder

Rocanrol · febrero 24, 2016

Muchas gracias, Armando

Responder
Alonso Buzano · marzo 12, 2016

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

Responder

Rocanrol · marzo 12, 2016

Se puede hacer sin problemas, pero no es tan necesario como lo sería en un


entorno de producción.

Responder

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.

Responder

Rocanrol · abril 15, 2016

Contacta con Hostinger, es extraño.

Responder
buddy · abril 12, 2016

Exelente he llevado dias con esto gracias

Responder

Rocanrol · abril 15, 2016

Gracias por comentar

Responder

doblevidarp · diciembre 16

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

Responder

Rocanrol · diciembre 16

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

Responder

Jose Angel · enero 15

Sinceramente, muy buen manual y muchas gracias por hacerlo

Responder

Responder
Introduce aquí tu comentario...

Buscar …

Entradas recientes

Ejemplo básico de Pusher + PHP + AJAX

Solución certificados auto-firmados dando problemas

Protegiendo login de Ubuntu con Latch

Drag & Drop y redimensionado de imágenes

Localizar direcciones usando Geocoder de Google Maps

Comentarios recientes

Francisco González (… en Establecer Blowfish como salt…

Angel Luis en Búsqueda instantánea con AJAX,…


Mario en Descarga de archivos con …

Carlos en Búsqueda instantánea con AJAX,…

Florencia Mendoza en Búsqueda instantánea con AJAX,…

Archivos

mayo 2017

abril 2017

febrero 2017

enero 2017

diciembre 2016

agosto 2016

junio 2016

abril 2016

marzo 2016

febrero 2016

enero 2016

diciembre 2015

noviembre 2015

octubre 2015

agosto 2015

julio 2015

junio 2015

mayo 2015

abril 2015

febrero 2015

enero 2015

Categorías

Desarrollo Web

Diseño Gráfico

Informática

Sin categoría

Tutorial

Meta

Registrarse

Acceder

RSS de las entradas

RSS de los comentarios

WordPress.com

Você também pode gostar