LAMP en Ubuntu

Instalar LAMP (abreviatura para Linux, Apache, Mysql, PHP/Perl/Phyton) en Ubuntu es sencillo:

sudo apt-get install php5 apache2 mysql-server

Es posible que no funcione el soporte PHP para MySQL, en ese caso son necesarios tres pasos más:

  1. Añadir el soporte para MySQL:
    sudo apt-get install php5-mysql
  2. Editar el fichero php.ini:
    sudo gedit /etc/php5/apache2/php.ini

    buscar la línea: ;extension=mysql.so y eliminar el ‘;’ del comienzo (‘;’ es el carácter que se usa para comentar líneas en php.ini)

  3. Reiniciar apache (yo lo hago desde el panel de control de Webmin.

¡y listo! 🙂

Puede que interese añadir soporte para PEAR, Curl o GD:

apt-get install php5-cli php-pear php5-curl php5-gd

Y no puede faltar PHPMyAdmin:

apt-get install phpmyadmin

Más información en inglés aquí:
http://www.linuxforums.org/servers/setting_up_a_server.html.

QT+Mysql (3ª parte): Conectando a una base de datos MySQL

Siguiendo con este minicurso de utilización de MySQL con QT vamos a ver un ejemplo de cómo conectar a una base de datos MySQL:

#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel resultado("");
    if (QSqlDatabase::isDriverAvailable("QMYSQL")) {
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("localhost");
        db.setDatabaseName("nombreBD");
        db.setUserName("usuarioBD");
        db.setPassword("claveBD");
        if ( db.open() )
           resultado.setText("Bien, base de datos cargada");
        else {
             QSqlError mensaje = db.lastError();
            resultado.setText(mensaje.text());
            }
    }
    else
        resultado.setText("No hay driver");
    resultado.show();
    return app.exec();
}

No creo necesario indicar (pero por si acaso lo hago) que hay que sustituir los valores: nombreBD, usuarioBD y claveBD por los valores adecuados.

Se puede indicar al programa que se conecte a un puerto diferente del habitual mediante:

        db.setPort(3306);

QT+MySQL (2ª parte): Comprobar si está disponible el driver MySQL para QT

Una sencilla aplicación que nos permite comprobar si está disponible el driver MySQL para usarlo con QT.

#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QLabel resultado("");
    if (QSqlDatabase::isDriverAvailable("QMYSQL")) {
       resultado.setText("Driver Mysql disponible");
    }
    else
        resultado.setText("Mala suerte, driver Mysql NO disponible");
    resultado.show();
    return app.exec();
} 

y para compilar no hay que olvidar editar el fichero *.pro y añadir la línea:

qt += sql

En este sencillo programa todo el trabajo importante recae sobre la función estática isDriverAvailable (de la clase QSqlDatabase), que es la que comprueba si está disponible el driver.

QT+MySQL (1ª parte): Compilar el driver MySQL para QT Windows

Si usas la versión de Windows XP de la QT seguramete habrás descubierto que el driver para MySQL no viene “de serie” por lo que es necesario compilarlo.

El problema a la hora de compilarlo es que las librerías libmysql.dll y libmysql.lib están compiladas con el compilador de Microsoft y no son compatibles con el compilador MinGW (el compilador para el que vienen preparadas las QT Open Edition). De tal forma que cuando intentemos crear nuestro driver nos encontraremos con un simpático mensaje similar a éste:

tmpobjrelease_sharedqsql_mysql.o(.text+0x4273):qsql_mysql.cpp: undefined refe
rence to `mysql_init@4'
tmpobjrelease_sharedqsql_mysql.o(.text+0x436e):qsql_mysql.cpp: undefined refe
rence to `mysql_real_connect@32'
tmpobjrelease_sharedqsql_mysql.o(.text+0x441d):qsql_mysql.cpp: undefined refe
rence to `mysql_select_db@8'
tmpobjrelease_sharedqsql_mysql.o(.text+0x449d):qsql_mysql.cpp: undefined refe
rence to `mysql_get_client_version@0'
tmpobjrelease_sharedqsql_mysql.o(.text+0x44b7):qsql_mysql.cpp: undefined refe
rence to `mysql_get_server_version@4'
tmpobjrelease_sharedqsql_mysql.o(.text+0x4642):qsql_mysql.cpp: undefined refe
rence to `mysql_close@4'
...
collect2: ld returned 1 exit status
mingw32-make[1]: *** [........pluginssqldriversqsqlmysql.dll] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.1.3/src/plugins/sqldrivers/mysql'
mingw32-make: *** [release] Error 2

Afortunadamente existe una solución: convertir las librerías a un formato válido para MinGW. Esto se hace con unos sencillos pasos:


cd c:\mysql\lib\opt
reimp -d libmysql.lib
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib  libmysql.a

(*) reimp viene en el paquete “MinGW-utililities”, que puede encontrarse en: http://sourceforge.net/project/showfiles.php?group_id=2435

(**) se supone que MySQL está instalado en (c:\mysql)

Ahora tenemos una librería llamada libmysql.a compatible con MinGW, ya sólo nos queda compilar el driver Mysql. Ahora podemos hacerlo tal y como se indican en las instrucciones de las QT:

  1. cd c:\qt\src\plugins\sqldrivers\mysql
  2. qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE"  "LIBS+=-LC:\MYSQL\LIB\OPT -lmysql"  mysql.pro
  3. make (por si acaso haz un “make clean” antes de make).

¡Listo! ya podemos disfrutar de nuestro nuevo y flamante driver para MySQL.

Fuente: Foros de las QT (un buen sitio para resolver tus dudas).

Ten en cuenta que la librería libmysql.dll (C:\mysql\lib\opt\libmysql.dll) tiene que estar disponible para el programa (tiene que estar en la variable PATH o en el mismo directorio que nuestro programa). En caso contrario el driver no se cargará correctamente.