Extension mysql obsolète

Un problème avec votre base de données MySQL, PostgreSQL ou autres.

Modérateurs : jturlier, Météo Villarzel

Répondre
Avatar du membre
helmain
Administrateur du site
Messages : 54
Enregistré le : 09 févr. 2014, 12:44
Localisation : FRANCE - Lagny-sur-Marne (77)
Contact :

Extension mysql obsolète

Message par helmain » 10 avr. 2014, 15:54

Certains d'entre vous possèdent des scripts php dans lesquels ils font appel à une base de données MySql.
Php fait évoluer ses extensions et ainsi depuis déjà quelques années un nouveau type d'extension "mysqli" (php_mysqli) est apparu, plus performant que les extensions de types "mysql" (php_mysql).
Depuis la version 5.5.0 de php les extensions de type "mysql" sont déclarées obsolètes par php et vont être supprimées dans un futur proche (http://www.php.net/manual/fr/intro.mysql.php).
Votre hébergeur pouvant changer la version de php qu'il utilise, il est donc conseillé de remplacer les fonctions utilisant "mysql" par des fonctions utilisant "mysqli.

Comment connaître la version de php utilisée par votre hébergeur ?
S'il n'existe pas déjà créez un script "info.php" en recopiant le code ci-dessous et en plaçant ce script à la racine de votre site :
<?php
phpinfo();
?>

Connectez vous ensuite sur votre site en ajoutant "/info.php" à l'url.
Exemple : http://toutletempslaniaque.net/info.php

Comment modifier vos scripts ?
- Si vous utiliser un script de connexion nommé par exemple "mysql_connect.php", il doit avoir un contenu de ce genre :

<?php
$server ="localhost";
$user="nom_user_mysql";
$pass="mot_de_passe_mysql";
$db="nom_base_de_données";

mysql_connect($server,$user,$pass) or die ("Erreur SQL : ".mysql_error() );
mysql_select_db($db) or die ("Erreur SQL : ".mysql_error() );

?>

- Si vous n'utilisez pas de script de connexion, il va falloir en créer un et l'appeler au début des scripts nécessitant un appel à votre base de données !!
Pour appeler le script de connexion il faut utiliser la ligne de code suivante :
require("mysql_connect.php"); ou require("mysqli_connect.php");

Le moins fastidieux, est de créer un second script de connexion que vous nommerez par exemple "mysqli_connect.php" et qui devra avoir ce contenu :

<?php
$server ="localhost";
$user = "nom_user_mysql";
$pwd = "mot_de_passe_mysql";
$db ="nom_base_de_données";

$conn=mysqli_connect($server,$user,$pwd,$db);
If(! $conn) {
exit("Echec de la connexion");
}

?>

Vous avez maintenant deux scripts de connexion, l'un avec mysql, l'autre avec mysqli.

Il vous faut maintenant modifier tous les scripts comportant une ou plusieurs requêtes mysql.

Pas de précipitation, commencez déjà par faire un inventaire et listez le. Une fois l'inventaire terminé, ouvrez le premier script à modifier.
Commencez par changer le nom du script de connexion en remplaçant "mysql_connect.php" par "mysqli_connect.php".

Ensuite, faites un rechercher/remplacer "mysql" par "mysqli" et remplacez tous les "mysql" utilisés dans des fonctions.

Puis passez à la requête, vous avez certainement quelque chose de ce genre

$sql = "select machin from truc where bidule > toto";
$query =
mysql_query($sql);

Là il faut effectuer un petit ajout :
$sql = "select machin from truc where bidule > toto";
$query =
mysqli_query($conn,$sql);

Faites de même pour toutes les requêtes du script.
Une fois les modifications terminées, vous n'avez plus qu'à tester votre script.

L'avantage d'avoir deux scripts de connexion, c'est que vous pouvez effectuer les modifications à votre rythme, jour après jour, script après script, et, une fois tous les scripts inventoriés modifiés, vous pouvez supprimer le script de connexion "mysql_connect.php" devenu inutile.

Bon courage et n'hésitez pas à poser des questions si vous avez des difficultés.
Station Vantage Pro2 + Soil/Leaf + Anémomètre déporté - Weatherlink 6.0.3 - Weather Display 10.37S build 84 - Cumulus 1.9.4 build 1099 - GraphWeather 3.0.28 - Windows 10/64 - VP2SQL + WDTU 1.2 pour Envoy8x - Hébergé par o2switch (MySql/PgSql)

Image

courtil
Messages : 54
Enregistré le : 25 mai 2014, 14:31
Localisation : Pas de Calais - France
Contact :

Re: Extension mysql obsolète

Message par courtil » 06 août 2014, 09:57

Bonjour à tous,

J'ai mis en application l'extension de Mysqli_connect.php

la version locale de WampServer (2.5) me le réclamant

j'ai suivi les conseils de Helmain dans son message.

je ne peux ouvrir les fichiers où sont appliqués cette nouvelle disposition

Vous trouverez ci-joint les copies de fichiers et d'écran de lancement dans Wamp
**********************************************************************************************
MYSQLI

<?php
$server =" localhost";
$user = "root";
$pwd = "xxxxxxx";
$db ="meteo";
$conn=mysqli_connect($server,$user,$pwd,$db);
If(! $conn) {
exit("Echec de la connexion");
}
?>
***************************************************************************************
PART_48H

<?php
// appel du script de connexion
require("mysqli_connect.php");
// On récupère le timestamp du dernier enregistrement
$sql="select max(tstamp) from data";
$query = mysqli_query($conn,$sql);
$list=mysqli_fetch_array($query);

// On détermine le stop et le start de façon à récupérer dans la prochaine requête que les données des dernières xx heures
$stop=$list[0];
$start=$stop-(86400*40);

// Récupération des données sur les dernières 48 heures avec un tri ascendant sur le timestamp
$sql = "SELECT tstamp, outdoortemperature, windchill, dewpoint, outdoorheatindex FROM data where tstamp >= '$start' and tstamp <= '$stop' ORDER BY 1";
$query=mysqli_query($conn,$sql);
$i=0;
while ($list = mysqli_fetch_assoc($query)) {
if (date("I",time())==0) {
$time[$i]=($list['tstamp']+3600)*1000;
}
else {
$time[$i]=($list['tstamp']+7200)*1000;
}
**************************************************************************
Si j'applique ces nouvelles dispositions dans les fichiers en intégrant les valeurs en clair
$server =" localhost";
$user = "root";
$pwd = "xxxxxxx";
$db ="meteo";

Aucun problème.

Vos lumières me seront utile ...

Cordialement

Michel dit Courtil
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
OS : Windows 11
Station Météo : Vantage PRO2
Cumulus version 313.3 version 3148
http://meteo621.free.fr/

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: Extension mysql obsolète

Message par Météo Villarzel » 06 août 2014, 10:45

Salut Michel,

J'ai le même problème sur mon serveur distant, erreur

Warning: mysqli_connect() [function.mysqli-connect]: (HY000/2005): Unknown MySQL server host ' localhost' (25) in /home/httpd/vhosts/boock.ch/httpdocs/meteo/graphiques_php/mysqli_connect.php on line 6
Echec de la connexion



La ligne 6 correspond à

$conn=mysqli_connect($server,$user,$pwd,$db);

J'ai essayé 4 autres script de connexions trouvée sur le net, toujours le même problème, je ne sais pas si cela vient de ma version PHP 5.3.27

Tu es bien en version 5.5.xx ?

A+
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: Extension mysql obsolète

Message par Météo Villarzel » 06 août 2014, 10:54

J'ai essayé ce script

<?php
if($bdd = mysqli_connect('localhost', 'nomutilisateur', 'mot de passe', 'nom de la bd'))
{
echo 'Connecté';
}
else
{
echo 'Erreur';
}
?>

Résultat la connection à la BDD est ok, mais j'ai des erreurs dans le graphique

Connecté
Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/httpd/vhosts/boock.ch/httpdocs/meteo/graphiques_php/48h_temperature_sqli.php on line 6

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /home/httpd/vhosts/boock.ch/httpdocs/meteo/graphiques_php/48h_temperature_sqli.php on line 7

Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/httpd/vhosts/boock.ch/httpdocs/meteo/graphiques_php/48h_temperature_sqli.php on line 19

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /home/httpd/vhosts/boock.ch/httpdocs/meteo/graphiques_php/48h_temperature_sqli.php on line 21

ligne 6
$query=mysqli_query($sql);

ligne 7
$list=mysqli_fetch_array($query);

ligne 19
$query=mysqli_query($sql);

et ligne 21
while ($list = mysqli_fetch_array($query)) {

en fait c'est partout ou j'ai modifier mysql par mysqli
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

courtil
Messages : 54
Enregistré le : 25 mai 2014, 14:31
Localisation : Pas de Calais - France
Contact :

Re: Extension mysql obsolète

Message par courtil » 06 août 2014, 11:04

Re Pierre André,

Voici mon pedigree :

WAMPSERVER 64bits version 2.5
APACHE 2.4.9
MYSQL 5.6.17
PHP 5.5.12
PHPMYADMIN 4.1.14 il recommande de passer à la version 4.2.7

Evidemment je peux toujours repasser à une version WAMPSERVER antérieure que je possède encore et qui accepte mysql
mais cela n'est pas rationnel !!!

Je m'en vais voir les réponses à ce sujet sur le forum de wampserver.

je te tiens au courant si je vois une solution

Merci pour tout

Cordialement

Michel
OS : Windows 11
Station Météo : Vantage PRO2
Cumulus version 313.3 version 3148
http://meteo621.free.fr/

courtil
Messages : 54
Enregistré le : 25 mai 2014, 14:31
Localisation : Pas de Calais - France
Contact :

Re: Extension mysql obsolète

Message par courtil » 07 août 2014, 05:11

Bonjour Pierre André,

Comme dit précédemment, j'ai déposé un message dans le forum de Wampserver

La solution m'a été donné:

une erreur de ma part !!!
**************************************
Si vous aviez procédé à une relecture, vous auriez constaté que vous avez mal écrit le nom du serveur.
Le nom du serveur est "localhost" et non " localhost", c'est-à-dire avec un blanc devant le nom
**************************************
Tout fonctionne localement, en effectuant bien sur les modifications de mysqli indiquées par HELMAIN

Sur ce forum, l'un des intervenants me dit :

*************************************************************
Je vous déconseille de poursuivre avec du mysql.
J'utilise maintenant du "pdo_mysql" qui est largement utilisé maintenant par la communauté php.
****************************************************************

je vais voir la question.

Cordialement

Michel
OS : Windows 11
Station Météo : Vantage PRO2
Cumulus version 313.3 version 3148
http://meteo621.free.fr/

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: Extension mysql obsolète

Message par Météo Villarzel » 07 août 2014, 23:18

:oops: mort de honte
Merci michel, j'avais la même erreur et je suis passé à côté 10 fois.
En fait en recopiant le code de Helmain, je n'ai pas touché la ligne localhost et il y a effectivement un espace.

$server =" localhost";

Je vais éditer son message pour éviter d'autre cas.

En tous cas merci, car je devenais chèvre

A+

Ps: merci tout de même à Helmain d'avoir posté la solution.

courtil
Messages : 54
Enregistré le : 25 mai 2014, 14:31
Localisation : Pas de Calais - France
Contact :

Re: Extension mysql obsolète

Message par courtil » 08 août 2014, 11:13

Bonjour Pierre André,

Tu sais ; il n'y a que celui qui ne fait rien qui ne se trompe pas ....

En revenant sur le forum WAMPSERVER, un de mes interlocuteurs me conseille vivement
de passer au tag PDO au lieu de MYSQLI mieux accepté par l'ensemble des SGBD
Il me joint l'interface de connection en rempalcement de mysqli_connect.php
et un petit programme de découverte.

Bon pour moi, la programmation objet est à découvrir !!!

Un site conseillé :

http://fr.openclassrooms.com/informatiq ... es-aux-bdd

Bonne fin de semaine
Cordialement

Michel
OS : Windows 11
Station Météo : Vantage PRO2
Cumulus version 313.3 version 3148
http://meteo621.free.fr/

Météo-Achiet
Messages : 27
Enregistré le : 03 déc. 2014, 15:44
Localisation : Pas de Calais
Contact :

Re: Extension mysql obsolète

Message par Météo-Achiet » 02 mars 2017, 09:32

Bonjour tout le monde.

J'apporte ma pierre à l'édifice

J'utilisais mysql_connect.php et tout fonctionnait correctement jusqu'au jour où l'hébergeur de ma base est passé en PHP Version 5.6.24.
Je me suis donc résolu à tout modifier pour utiliser mysqli_connect.php et là surprise: impossible de se connecter à la base.
J'ai donc contacté mon hébergeur qui me dit qu'il y a des erreurs dans mon script et me le corrige:

mysqli_connect.php d'origine:

<?php
$server ="serveur";
$user = "nom_user_mysql";
$pwd = "mot_de_passe_mysql";
$db ="nom_base_de_données";
$conn=mysqli_connect($server,$user,$pwd,$db);
If(! $conn) {
exit("Echec de la connexion");
}
?>

mysqli_connect.php corrigé:

<?php
$db_host = "serveur";
$db_username = "nom_user_mysql";
$db_password = "mot_de_passe_mysql";
$db_name = "nom_base_de_données";

$conn = @mysqli_connect($db_host, $db_username, $db_password, $db_name);
if(!$conn)
exit ("Impossible de se connecter à MySQL et à la base de données. MySQL dit : ".mysqli_connect_error(). __FILE__. __LINE__);
else
echo ""; <= on peut remplacer echo ""; par echo "Connecté"; pour vérifier que tout fonctionne correctement
?>

Voilà, si ça peut aider quelqu'un, eh bin tant mieux ;)

Pierre
Davis VP2 6152EU
data logger+VirtualVP1.2.5+cumulus 1.9.4+Cumulus2SQL_1_0_4_19+NOAAtableNew_1_0_1_4
WampServer Version 3.1.9
http://www.meteo-achiet.infos.st/index.php

Répondre