Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2016, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Le storiche funzioni mysql_ di PHP sono diventate deprecate dalla versione 5.5.0, e sono state completamente rimosse dalla nuovissima versione di PHP 7.0 che ha fatto la sua nascita alla fine del 2015.

Quindi, dato che la maggior parte del vecchio codice sorgente di quasi tutti i siti o le applicazioni web "hand-made" contengono in misura piàù o meno pesante queste chiamate a funzione mysql, bisogna trovare un modo veloce per eseguire dei "refactoring completi" e arginare il problema prima che php 7.0 diventi lo standard.

Tra l'altro, queste funzioni deprecate riempiono i log degli errori di PHP di stringhe di questo tipo:

mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead

Ricordatevi che proprio tutte le funzioni del vecchio mysql_ sono diventate deprecate, quindi mi riferisco a mysql_connect, mysql_query, mysql_select_db, mysql_fetch_assoc e via dicendo. Tutto il vecchio armamentario mysql.

Fortunatamente i bravi coder in PHP ( in questo caso, più scripter che coder ) hanno già trovato e scritto una soluzione, che è disponibile su GitHub: MysqlConverterTool su GitHub ( fork )

Una volta scaricata ( Link al Master su GitHub ) è da scompattare dove più preferite sul vostro sistema. Dispone sia di una GUI sia di una interfaccia a riga di comando per impostarne i parametri. In questa guida utilizzeremo la modalità a riga di comando, più comoda per gli smanettoni su *nix.

cd MySQLConverterTool-master
php -q cli.php

Questo comando senza parametri ci spiega come utilizzare lo strumento:

Usage of cli.php :

-f <file>         Convert file
-d <directory>    Convert directory
-p <pattern>      File name pattern for -d, e.g. -p "*.php,*.php3". Default: *
-s <code>         Convert code snippet

-u                Update (modify) input file during the conversion
-b                Backup files to [original_name].org before they get updated

-v                verbose - print conversion details
-w                warnings - print errors/warnings, if any
-q                quiet - don't print the generated code

Quindi, dopo che abbiamo compreso le istruzioni, possiamo mandare il comando

php cli.php -d /home/maurizio/public_html -p "*.php" -u -q

A questo punto, il tool manderà in output sulla riga di comando tutti gli script modificati. Adesso quindi, è meglio controllare se l'applicazione sta funzionando. Molto probabilmente il tool avrà dimenticato qualcosa, come nel mio caso, nel quale in una applicazione molto vetusta erano presenti delle chiamate alla funzione mysql_result. Per aggiustare il problema, mi è bastato testare l'applicazione, analizzare il file di log degli errori di PHP segnando le righe degli script che causavano l'eccezione sulla mysql_result, e poi andare a integrare nell'applicazione una piccola funzione che fa da compatibilità tra la vecchia mysql_result e il nuovo mysqli.

function mysqli_result($res,$row=0,$col=0){ 
	$numrows = mysqli_num_rows($res); 
	if ($numrows && $row <= ($numrows-1) && $row >=0){
		mysqli_data_seek($res,$row);
		$resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res);
		if (isset($resrow[$col])){
			return $resrow[$col];
		}
	}
	return false;
}

A questo punto, basta modificare manualmente tutte le chiamate alla funzione mysql_result, usando appunto la mysqli_result, con gli stessi identici parametri.