jueves, 24 de noviembre de 2011

Conectar con el servidor MySQL

En primer lugar, se supone que nuestro PHP tiene activadas las librerías necesarias para trabajar con MySQL. Si no es así, (compruébalo con phpinfo). Nuestra intención, ahora, es únicamente conectar con el servidor de base de datos y comprobar que no ha habido error.

En segundo lugar, necesitas un usuario en MySQL con los permisos adecuados. En la creación de usuarios tenemos, básicamente, dos opciones, usuarios locales y remotos pero, cuidado, hablamos en el contexto del servidor: "locales" a la máquina donde está instalado el servidor. La razón de ser de los usuarios locales, como el 'root'@'localhost', es que solo puedan conectarse desde la consola del propio ordenador donde está instalado MySQL.

En cualquier caso, son fácilmente distinguibles y, además, a nosotros no nos interesan los "locales", sino los remotos. Vamos a crear un usuario específico para los que se conecten via PHP, pongamos

CREATE USER 'phpuser'@'%' IDENTIFIED BY 'phpcontra'

En MySQL los nombres de usuario tienen dos partes, el nombre propiamente dicho y desde donde se van a conectar. Como no tenemos una IP o una URL específica desde la que se conectará este usuario particular, lo definimos como que "se conectará desde cualquier sitio", es decir, '%'. Por cierto, localhost no está incluido en "cualquier sitio".

Probémoslo. Vamos a crear el siguiente archivo en la ruta de publicación de nuestro servidor HTTP (si es xampp en windows, en ...\xampp\htdocs\):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Probando conexión a MySQL</title>
    </head>
    <body>
        <?php
        $link = mysql_connect('localhost', 'phpuser', 'phpcontra') 

                or die('Error de conexión.');

        mysql_close($link);
        ?>
    </body>
</html>

En realidad, la variable $link1 todavía no le hemos dado uso, eso vendrá después. Lo importante es que ya hemos introducido nuestra primera función de la librería MySQL en PHP: mysql_connect(). Es evidente que se utilizan tres parámetros:
  1. el servidor al que nos queremos conectar,
  2. el nombre del usuario que se va a conectar
  3. y su contraseña.2
Obviamente, estos datos dependerán de cada situación. Concretamente, el primer parámetro puede ser una url cualquiera, no es necesario que accedamos exclusivamente al servidor instalado en local3, podría ser un 'unmysql.eps.ua.es', por ejemplo.

La segunda parte de la orden (...or die...) es una forma simple, no la única, de controlar los errores. En este caso, si los datos no fueran correctos, se provocaría un error de ejecución que derivaría en una página resultado que nos mostraría el texto "Error de conexión". Por ejemplo, prueba lo mismo pero cambiando el nombre de usuario a 'otrouser':
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'otrouser'@'localhost' (using password: YES) in N:\xampp\htdocs\phpsimplon\index.php on line 9
Error de conexión.

Para evitar el mensaje de error que devuelve MySQL (podría revelar demasiada información potencialmente peligrosa) se puede añadir un '@' delante de la función:

$link = @mysql_connect('localhost', 'otrouser', 'phpcontra') or die('Error de conexión.');

Y el resultado entonces sería, simplemente:
Error de conexión.
La última instrucción es pura higiene, mysql_close(), hemos abierto una conexión, hemos hecho lo que teníamos que hacer, terminado, pues cerramos la conexión.

El siguiente paso sería aprovechar esta conexión y recuperar algún dato, ¿no?


1 En PHP, todas las variables comienzan por el carácter '$' y no hace falta declararlas. De hecho, PHP es un lenguaje de tipado dinámico.

2 Entiéndase que el hecho de poner estos datos potencialmente sensibles no afecta a la seguridad. Puesto que los fuentes PHP se ejecutan en el servidor, el navegador que acceda a ellos no muestra esa información, no será visible ni aunque veamos la página en modo "código fuente". 

3 Otra vez tenemos que ponernos en el contexto del intérprete PHP. Por localhost se entiende la máquina en la que se esté ejecutando el código. Pongamos, yo soy un cliente (un navegador) en MiOrdenador y estoy accediendo a una página en internet en www.lejos.ua.es que, realmente, se está ejecutando en un OrdenadorRemoto. Localhost, entonces, sería OrdenadorRemoto, no MiOrdenador; el PHP se está ejecutando en OrdenadorRemoto.