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
?>