PHP 7 y MySQL

Apunte rápido.

Si se hace una migración de versión a PHP 7, hay una cosa que se ha de tener en cuenta en los desarrollos.

Hasta ahora había 3 formas principales de acceso a los datos de MySQL, el driver mysql, el más moderno mysqli, y a través de PDO.

Si os encontrais con desarrollos que utilicen el viejo driver mysql, dejarán de funcionar muy probablemente todos esos maravillosos objetos y funciones que obtengan los datos de MySQL.

La solución pasa por cambiar el código para usar alguno de los más modernos. Si no quereis complicaros mucho la solución sencilla (al menos para mí) consiste en cambiar en el código la el texto «mysql» por «mysqli».

Sin embargo, no funcionará solo con ese cambio. Hay que tener en cuenta que para las funciones de selección de juego de caracteres y recuperación de datos necesitarán que se les incluya la conexión.

También, para mejorar el proceso, en PHP7 deja de permitirse el generar el constructor de un objeto utilizando como nombre de funcion el nombre de la clase, pasando a tener que utilizar un metodo «__construct».

Aquí os dejo un pequeño ejemplo:

class bd{
var $host;
var $conexion;
var $bd;
var $usuario;
var $clave;
var $tipo;

/*metodo contructor que carga los datos de la conexion. Este ya NO ES VALIDO*/
/*
function bd(){
global $bdhost;
global $bdnombre;
global $bdusuario;
global $bdclave;
$this->host=$bdhost;
$this->bd=$bdnombre;
$this->usuario=$bdusuario;
$this->clave=$bdclave;
$this->tipo=»mysqli»;
$this->conexion=mysqli_connect($this->host, $this->usuario, $this->clave) or die (mysqli_error());
mysqli_set_charset($this->conexion, ‘utf8’);
mysqli_select_db($this->bd, $this->conexion) or die(«Error en la selecci�n de la base de datos»);
}//contructor
*
*/

function __construct(){
global $bdhost;
global $bdnombre;
global $bdusuario;
global $bdclave;
$this->host=$bdhost;
$this->bd=$bdnombre;
$this->usuario=$bdusuario;
$this->clave=$bdclave;
$this->tipo=»mysqli»;
$this->conexion=mysqli_connect($this->host, $this->usuario, $this->clave) or die (mysqli_error());
mysqli_set_charset($this->conexion, ‘utf8’);
mysqli_select_db($this->conexion, $this->bd ) or die(«Error en la selección de la base de datos»);
}//contructor

/*funcion que ejecuta una sentencia sql sobre la base de dato y devuelve la consulta a dicha base*/
function query($sql){
$query=mysqli_query($this->conexion,$sql) or die(«Error MySql: «.mysqli_error().» «.$sql);
return $query;
}//query

/*funcion que devuelve el numero de filas cuando se le pasa una consulta generada por sql*/
function num_rows($query){
$num_rows=mysqli_num_rows($query);
return $num_rows;
}//num_rows

/*funcion que va sacando los datos con formato de array asociativo de una consulta generada por sql
la cual se le pasa, cada vez que se le llama avanza una fila*/
function fetch_array($query){
$fila=mysqli_fetch_array($query);
return $fila;
}//fetch_array

/*funcion que va sacando los datos con formato de objeto de una consulta generada por sql
la cual se le pasa, cada vez que se le llama avanza una fila*/
function fetch_object($query){
$fila=mysqli_fetch_object($query);
return $fila;
}//fetch_object

/*funcion que libera el buffer de la consulta generada por sql que se le pasa*/
function free_result($query){
mysqli_free_result($query);
}//free_result

/*funcion que cierra la conexion de la base de datos*/
function cerrar(){
mysqli_close();
}//cerrar conexion
}//class bdwd
?>

Colaborando con Freddy Varó.

Viejos amigos, nuevos proyectos.

Desde hace unas semanas vengo colaborando con el mago profesional Freddy Varó,

Principalmente es sobre todo ayuda técnica, orientada a las necesidades tecnológicas y cotidianas que le pueden surgir a cualquier profesional, tanto de la rama de espectáculos como de cualquier otra.

Toda compañia es buena si sirve para crecer e ir aprendiendo, y la verdad es que con Freddy he ido descubriendo algunas cuestiones que interesan a la hora de crecer y plantear nuevos retos.

Y desde luego, en el plano profesional, es un auténtico «crack». Todas sus actuaciones estan preparadas a conciencia y consigue algo complicado, que niños y mayores estén pendientes de su actuación hasta el final. Siempre sorprendente y siempre agradable.

Os invito a visitar su página o a seguirle en Facebook o Twitter y enteraros de todas sus novedades.

Vladimir-Magic-Portada

Textos largos, ODBC y PHP. Accediendo a una base de datos Access.

Bueno, me imagino que a los que podáis leer esto alguna vez os haya ocurrido.

Por circunstancias de mantenimiento de sitios web que tienen la base de datos en Access, me encuentro con que al recuperar un campo MEMO de Access en una pagina php me cortaba el contenido.

El problema estaba en una directriz de la sección ODBC del php.ini, en concreto en la siguiente variable:

; Handling of LONG fields.  Returns number of bytes to variables.  0 means
; passthru.
; http://php.net/odbc.defaultlrl
ODBC.defaultlrl = 4096

Su valor por defecto es de 4096 bytes para cada variable, pero si vais a utilizar textos realmente largos, es mejor cambiar este valor a uno superior, o dejarlo en ON para no tener limite (aunque esto es bastante arriesgado, ya que probablemente el consumo de memoria se dispararía).

¿Pues no me he tirado un par de días comiéndome la cabeza por esto?…

En fin, por si a alguien más le pasa, aquí queda constancia del error y su solución.

Saludos!!

Replanteos

Bien, tras varios días ocupado (y si, sin actualizar aquí bastante tiempo), por fin tengo terminado una nueva infraestructura.

A través de un Windows 2008 Server Foundation he actualizado de un servidor Windows 2003 (Bueno, más que actualizar, borrón y cuenta nueva).

Primera en la frente, los controladores de datos de Access que me hacían falta para que funcionaran unos sitios web de trabajo no estan en la instalación predeterminada, por lo que me ha tocado descargarlos de la propia microsoft.

Segunda, en las webs que estoy modificando en pruebas, el codigo existente utiliza el controlador de microsoft, hasta aqui perfecto, pero me seguia saliendo el bonito error 80004005 “Microsoft OLE DB Provider for ODBC Drivers error ‘80004005’”, porque no conseguia inicializar el controlador odbc correcto.

Bueno, en este caso la solucion es facil, en asp “clasico” (como denomina microsoft al asp de hace unos años, y que es el usado por muuuchas webs) el controlador de Access se declara como:

“DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=archivo.;PWD=contraseña;"

Al haber descargado los componentes de Access 2010, para poder utilizarlos en 64 bits, el controlador cambia un poquito la definicion para poder usarlo. En concreto de esta forma (la negrita es lo nuevo):

DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=archivo;PWD=contraseña;"

Tambien hay que realizar un pequeño cambio en la configuración del IIS server.

En concreto, para que las paginas asp “clásicas” sigan funcionando sin problemas en IIS 7.5 es necesario modificar el modo de canalización del grupo de aplicaciones donde se encuentre nuestra página web para que en vez de usar el modo “Integrado” (por defecto) use el modo “Clásico”.

El metodo es:

  1. Abra el Administrador de IIS.

  2. En el panel Conexiones, expanda el nodo de servidor y, a continuación, haga clic en Grupos de aplicaciones.

  3. En la página Grupos de aplicaciones, seleccione un grupo de aplicaciones de la lista.

  4. En el panel Acciones, haga clic en Configuración básica.

  5. En la lista Modo de canalización administrada, seleccione una de las opciones siguientes:

    • Integrada si desea utilizar el procesamiento de solicitudes integrado de IIS y ASP.NET.
    • Clásica si desea utilizar de manera independiente los modos de procesamiento de solicitudes de IIS y ASP.NET.
  6. Haga clic en Aceptar.

Y con esto ya tenemos listo el servidor… para trabajar con las aplicaciones antiguas.

Si deseamos usar las nuevas caracteristicas de IIS7 con ASP se puede utilizar en otro grupo de aplicaciones y sitios web la canalización Integrada para funcionar.

Actualizando a WordPress 3.0

Bien, nueva versión de WordPress, actualizando el blog.

Pero en esta ocasión me he encontrado con un “problemilla”. Resulta que al intentar hacer la actualización automática me salía un bonito error.

El mensaje decía algo así como:

You are not allowed to call this page directly.

Busca, rebusca, prueba a intentar entrar en el servidor, utilizarlo como sitio desde donde se ve la web… y nada, no había manera.

Tras bucear un poco por ahí, encontré una solución en http://wordpress.org/support/topic/385355.

El causante de todo es un plugin, de tal manera que, si se tiene instalado el plugin “Nextgen Imageflow” empieza a aparecer ese error al tratar de actualizar el núcleo de WordPress, en concreto al llamar a la pagina update-core.php.

En este caso la solución consiste en desactivar temporalmente el plugin rebelde y volverlo a activar tras haber conseguido actualizar correctamente el núcleo.

Nuevo tema

Bien, como habreis observado, la apariencia de la página ha dado un giro radical.

Esto se debe a un programa, Artisteer, el cual permite generar plantillas para los principales CMS (WordPress, Joomla!, PHP-Nuke), para aplicaciones ASP.NET, páginas XHTML.

La verdad que lo estoy usando y es una gozada.

Ahora si que puedo hacer un diseño para algunos proyectos que tengo en mente sin que me haga falta un diseñador (al menos para ponerlos en marcha… jeje)

En marcha de nuevo

Seguimos con las aventuras del Ciberbús.

Ya hemos terminado la provincia de León y ahora hemos entrado en Zamora, en la zona del Lago de Sanabria.

Historias tenemos de todo tipo, aunque la mayoría de la gente nos suele preguntar como pueden conseguir una velocidad decente de ADSL en sus pueblos…

Teniendo en cuenta que en varios no hay casi ni cobertura de móvil… mal lo llevamos.

100_0887

Por otra parte… una furgoneta que le caduca la ITV el día 18… me la cambian el 19 y me traen una que el aire acondicionado lo tiene jodido… dios… que panda de gente… hay que joderse.

Y menos mal que el servidor vuelve a estar totalmente operativo, que sino ya es para darme algo…

Reinicio de Servidor.

Bien, si os habeis fijado, en estos dos días la página no ha estado muy fina…

He estado reinstalando el servidor. Un proceso que no debería haber llevado más de una hora… y que por algunos motivos se ha demorado un día.

Aunque bueno, siempre hay algo positivo, ya se que es lo que no hay que hacer… y no volverá a pasar…

Titiriteros…

Bueno, pues algún día tenía que pasar…

Hoy un “listo” (panadero del pueblo) según nos ha visto instalarnos en la localidad de hoy (Chozas de Abajo), ha saltado una frase que le identifica: “Hoy esta el pueblo con los titiriteros”…

No es plan de meterme mucho… pero vamos, un autobús, un escudo de la Junta de Castilla y León… ¿No te dice nada machote?, aunque claro, hay que entenderlo… el va vendiendo pan por los pueblos a base de bocinazo…

Si es que hay veces que me enervo…

Ciberbús CYL Digital.

Bueno, con esta entrada voy a inaugurar una serie de entradas que van a tener que ver con mi trabajo actual.

Voy a recorrer los pueblos de Castilla y León como formador en el Ciberbús CYL Digital, y voy ir contando anecdotas, cositas, los pueblos por donde pasamos…

De momento la primera noticia es… ¡¡Tenemos diseño para el exterior!!

Así que la previsión es salir el día 1 de Junio.

Esperemos que así sea.

MCP

Bien, pues ya conseguí superar el martes el primer examen del MCSE (Microsoft Systems Certified Engineer) y ahora ya puedo considerarme un MCP (Microsoft Certified Profesional)

Me he sacado el examen de Administración y Mantenimiento de Windows 2003 Server (290).

Y ahora a seguir con los siguientes.

Pero ya puedo empezar a usar el logotipo de MCP. 😀

MCP(rgb)

Nota: Si, es pedante ponerlo y que… me apetecía.