darbula ci sei? Ti aggiorno un po' su quello che ho modificato e cambiato sul mio sito di test per provare a passare da php 5.6 a php 7.1. (Non c'è bisogno che commenti riga per riga, ma solo che mi avvisi se alcune cose le ho sbagliate o se hai dei consigli)
- Ho sostituito mysql_connect con mysqli_connect + ho aggiunto il quarto parametro, ovvero il nome del database (e quindi ho rimosso mysql_select_db)
- mysql_set_charset l'ho sostituito con mysqli_set_charset (non ho capito però cosa mi avevi detto di fare oltre a questo)
- A mysql_connect ho rimosso or die("Could not connect to database, error: ".mysql_error()); e ho aggiunto questo if:
Codice PHP:
// Controllo connessione
if (!$connect) {
die("Connessione fallita: " . mysqli_connect_error());
}
- Ho aggiunto mysqli_close($connect) in fondo (nel footer del sito). Ho fatto bene?
- Dopo ogni query io ero solito mettere or die(mysql_error_alert()), l'ho sostituito con or die(mysqli_error($connect)). Ci ho quindi aggiunto le info della connessione come parametro. Va bene?
- mysql_fetch_array l'ho sostituito semplicemente con mysqli_fetch_array
- mysql_num_fields l'ho sostituito semplicemente con mysqli_num_fields
- mysql_field_name ho visto che non è più supportato/esistente... l'ho sostituito con mysqli_fetch_field_direct, senza però alterare i vecchi parametri che gli passavo.
- mysql_num_rows l'ho sostituito semplicemente con mysqli_num_rows
- mysql_real_escape_string l'ho sostituito con mysqli_real_escape_string + ho dovuto aggiungere le info sulla connessione come primo parametro della funzione.
- La più importante... mysql_query l'ho sostituita con mysqli_query e come primo parametro gli ho dovuto mettere le info sulla connessione. Ecco un confronto:
Codice PHP:
// Prima
mysql_query("SELECT * FROM cms_pages WHERE code = '".$code."'") or die(mysql_error_alert());
// Dopo
mysqli_query($connect, "SELECT * FROM cms_pages WHERE code = '".$code."'") or die(mysqli_error($connect));
Davvero non capisco perché abbiano dovuto complicare le cose. Prima era più pulito, ora bisogna ogni volta mettere questa cavolo di informazione per la connessione...
E qui inizia il primo problema... Ho creato la variabile globale $connect a cui ci associo le informazioni del DB:
Codice PHP:
$connect = mysqli_connect($db_host, $db_user, $db_pass, $db_database);
Il problema è che ora con questa versione di PHP devo mettere tale variabile come primo parametro di ogni query, giusto?
Solo che io ho mille funzioni e classi sparse in tutti i file del sito... non è tanto il problema di aggiungerlo manualmente, ma il fatto che tale variabile all'interno delle funzioni non viene vista. Come posso fare?
So che potrei mettere questo all'inizio di ogni funzione (o ancora peggio passarglielo come parametro):
Codice PHP:
global $connect;
Lo trovo però così ridondante e scomodo. Hai qualche consiglio o suggerimento da darmi?
----
Mi sembra assurdo di dover infilare sto $connect ovunque. Guarda quest'altro esempio (quattro connect in una sola riga):
Codice PHP:
function update_value($json_name, $json, $name, $new_value)
{
// Roba che ho tagliato
global $connect;
mysqli_query($connect, "UPDATE cms_config SET `".mysqli_real_escape_string($connect, (trim($json_name))."` = '".mysqli_real_escape_string($connect, ($result)."'") or die(mysqli_error($connect));
return $result;
}