Conversion vers MySQLi
Bonjour,
J'ai un code php5 (hébergé chez free) que je dois convertir en php8, car ne fonctionne plus. Je commence par le code de connexion à la bd:
$link = mysql_connect ($host,$user,$pass) or die (); mysql_select_db($db);
donne :
$link = mysqli_connect($host, $user, $pass, $db);
// Vérification de la connexion
if (!$link) {
die("Échec de la connexion : " . mysqli_connect_error());
}
J'ai l'erreur :
Fatal error: Call to undefined function: mysqli_connect()
Pourquoi ?? Et comment y remédier ?
- Merci
15 réponses
-
Oui, mais faut quand m^eme reprendre tous les codes, un par un, ligne par ligne pour les modifier ..........
-
-
@jee pee
Oui ! Toujours en php4.
Comment activer le php8.5 dans le htaccess et tester le code du <9> pour voir si c'est mieux en mysqli.
-
-
-
Il n'est pas nécessaire d'activer mysqli. Il suffit de passer de la version 5.0 à la version 8.0 de PHP. Les commandes mysqli fonctionneront automatiquement.
-
Modérateur
Je n'ai pas d'autre idée.
-
Merci jee pee !
Oui, j'ai accès à ma base via phpmyadmin !
Et pour les comptes gratuit, Free ne veut pas intervenir ..................
-
Modérateur
J'ai effectué des tests car ton message ne comporte pas de libellé d'erreur alors que ça devrait.
Si je mets un mot de passe erroné en php4 j'ai une erreur :
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'mon_site'@'172.20.244.169' (using password: YES) in /var/www/sda/3/8/mon_site/accbddv4.php on line 9
Echec de la connexion au serveur MySQL. Code erreur : 1045 - Message : Access denied for user 'mon_site'@'172.20.244.169' (using password: YES)De façon singulière, les 3 autres paramètres ne semblent servir à rien, cela ne déclenche pas d'erreur et je me connecte, l'url du site doit suffire, avec un mot de passe correct, car je me connecte avec le paramétrage suivant :
$serveur = "ccm";
$utilisateur = "ccm"; // Identifiant de votre compte Free (ex: monpseudo)
$mot_de_passe = "YYYYY"; // Votre mot de passe de base de données
$base_de_donnees = "ccm"; // Chez Free, le nom de la BDD est identique à l'identifiantTu as un problème d'accès à la BDD. Y-as-tu accès via le phpadmin sur free.fr ?
Il y a désormais depuis juin un nouveau noyau de BDD sur free, mariaDB. Je n'ai pas trouvé où on peut demander la migration, mais suite à tes soucis n'as tu pas effectué une telle demande de migration pour la BDD ?
J'ai aussi lu qu'à l'occasion des travaux sur les serveurs et bdd, free s'est aperçu que des utilisateurs dépassaient les quotas de taille autorisés, ce qui pourraient entrainer des blocages ?
-
Merci jee pee. J'ai testé ton code, et j'ai comme retour :
Echec de la connexion au serveur MySQL. Code erreur : - Message :
-
J'ai l'erreur :
Fatal error: Cannot instantiate non-existent class: mysqli in /var/www/sdb/b/a/genfamille/test_bd.php on line 6
La ligne 6 correspond à
$db_con = new mysqli("$host","$user","$pass","$db");
Si je comprends, c'est que mysqli n'est pas activé !
-
Modérateur
en php 4 ce ne doit pas être mysqli, même la méthode d'accès PDO ne fonctionne qu'avec php 5
voilà un test que je viens de réaliser en php 4
<?php // 1. Définition des variables de connexion $serveur = "sql.free.fr"; $utilisateur = "xxxxx"; // Identifiant de votre compte Free (ex: monpseudo) $mot_de_passe = "yyyy"; // Votre mot de passe de base de données $base_de_donnees = "xxxx"; // Chez Free, le nom de la BDD est identique à l'identifiant // 2. Connexion au serveur MySQL $connexion = mysql_connect($serveur, $utilisateur, $mot_de_passe); // Vérification de la connexion if (!$connexion) { die("Echec de la connexion au serveur MySQL. Code erreur : " . mysql_errno() . " - Message : " . mysql_error()); } // 3. Sélection de la base de données $selection_base = mysql_select_db($base_de_donnees, $connexion); // Vérification de la sélection de la base if (!$selection_base) { die("Impossible de selectionner la base de donnees. Code erreur : " . mysql_errno() . " - Message : " . mysql_error()); } echo "Connexion reussie a la base de donnees Free !"; // 4. Test d'une requête SQL $sql = "SELECT * FROM article"; $result = mysql_query($sql, $connexion); if (!$result) { // La requete a échoue, on affiche l'erreur MySQL die('Erreur de requete SQL : ' . mysql_error()); } else { // Traitement des données si tout va bien while ($row = mysql_fetch_assoc($result)) { echo $row['nom'] . '<br />'; } } // 5. Fermeture de la connexion (optionnel en fin de script) mysql_close($connexion); ?>on peut générer une erreur, qui en sql est très claire, mettre à la place du nom de table article, une table inexistante.
-
-
Essayez ceci
$db_con = new mysqli("localhost","my_user","my_password","my_db"); // Check connection if ($db_con -> connect_errno) { echo "Failed: " . $db_con -> connect_error; exit(); } -
Non. Le document n'est pas enregistré sur le site, et aucune erreur ne remonte !
Et maintenant plus rien ne s'affiche dite, à part le html. Même les liens ne fonctionnent plus !
-
Modérateur
On revient aux questions de départ. Le document est-il déposé physiquement sur ton site. Si oui quelle est l'erreur sur l'ordre SQL.
-
La version php de mon site sur Free 4.4.3.
Mais je suppose que le problème vient de chez Free. J'ai testé mon site sur un autre hébergeur, il fonctionne !!!
-
Modérateur
Un de mes sites qui ne fonctionnait pas maintenant remarche.
J'ai testé il est possible de le passer en PHP8.5 en mettant dans le fichier htaccess
<IfDefine Free>
php85 1
</IfDefine>Le php8.5 fonctionne dans le nouveau https://xxx.pages-perso.free.fr mais aussi dans l'ancien mode non sécurisé http://xxx.free.fr
-
Modérateur
Bonjour,
As-tu vérifié la version php active sur ton site ?
Sur un des miens je suis en PHP Version 5.6.40, pas 8.5 donc cela dépend des serveurs. Et aussi du .htaccess où sur free on peut sélectionner la version choisie.
Dans le .htaccess j'ai un ancien paramètre
# Activer le php5 sur free.fr (php4 par defaut)
php 5Sur un site sans le .htaccess je suis en PHP Version 4.4.3-dev. Et j'ai essayé de mettre php 8, je reste en 5.
Pour afficher la version mettre un fichier comme info.php contenant <?php phpinfo(); ?> et le lancer à la main.
Les migrations sont peut être en cours. Free a toujours été très mauvais sur la communication. J'ai 2 sites plus accessibles, ni en ftp, ni avec un navigateur.
-
Après ma tentative de passer à php8 (mysql en mysqli), j'ai voulu revenir en arrière. Comme je n'avais pas changé grand chose, pas trop de boulot.
Mais là, plus rien de ma base ne s'affiche, même sur la page d'accueil !??? Que le html .............. Sur cette page, je met un petit texte de présentation, puis j'affiche le nombre d'individus per nom que j'ai dans ma base ...........
Voici mon code de connexion à la bd :
<?php // information pour la connection à le DB $host = 'sql.free.fr'; $host = 'sql.free.fr'; $user = 'genfamille'; $pass = '......'; $db = 'genfamille'; $link = mysql_connect ($host,$user,$pass) or die (); mysql_select_db($db); ?>
Ma page d'accueil :
<center><br><br> Ce site présente une généalogie des branches <b>HUMBERT, DAMERON ,DAQUIN</b> et <b>MALFOI</b> <br>Pour raison de confidentialité, ne seront présentés que les années de naissance < année actuelle - 110.<p> Le nom <b>DAQUIN</b> était écrit <b>DACQUIN</b> ou <b>D'ACQUIN</b> jusqu'au milieu du XVIII° siècle.<br> Le nom <b>MALFOI</b> était écrit <b>MALFOY</b> jusqu'au milieu du XIX° siècle. <BR><BR><BR> Cette généalogie se compose de : <?php include ('connexion/connexion.php'); //$host = 'localhost'; //$user = 'root'; //$pass = ''; //$db = 'gen_famille'; //$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); //mysql_select_db($db) or die ('Erreur :'.mysql_error()); $date = date("Y"); $date2 = $date-110; $query = 'SELECT count(id) FROM individus WHERE (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result = mysql_query($query) or die (mysql_error()); $resultat=mysql_fetch_row($result); echo "$resultat[0] individus<p>dont<br>"; $query2 = 'SELECT count(id), MIN(RIGHT(date_naissance, 4)) AS date FROM individus WHERE famille LIKE "%HUMBERT%" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result2 = mysql_query($query2) or die (mysql_error()); $resultat2=mysql_fetch_row($result2); $row2 = mysql_fetch_array($result2); echo "$resultat2[0] individus dans la branche HUMBERT<br>"; echo ''.$row2['date'].''; $query3 = 'SELECT count(id) from individus WHERE famille LIKE "%DAMERON%" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result3 = mysql_query($query3) or die (mysql_error()); $resultat3=mysql_fetch_row($result3); echo "$resultat3[0] individus dans la branche DAMERON<br>"; $query4 = 'SELECT count(id) from individus WHERE famille LIKE "%DAQUIN%" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result4 = mysql_query($query4) or die (mysql_error()); $resultat4=mysql_fetch_row($result4); echo "$resultat4[0] individus dans la branche DAQUIN<br>"; $query5 = 'SELECT count(id) from individus WHERE famille LIKE "%MALFOI%" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'" )'; $result5 = mysql_query($query5) or die (mysql_error()); $resultat5=mysql_fetch_row($result5); echo "$resultat5[0] individus dans la branche MALFOI<br>"; ?> Elle a été préparée et éditée par : <p>Thierry HUMBERT <br> N'hésitez pas à me contacter ..... <div class="contact-img"><a href="contact.htm" target="cadre2"><img src="images/lettre.ico" border="0" width="42"></a></div> <p></p> Retrouvez l'ensemble des données à l'aide des menus situés dans la barre du haut.<p> <font size=1>Localité de FLEZ-CUZY (58), pas d’acte disponible en ligne de 1693 à 1698, 1700, et 1711 à 1738.</font> <BR><BR> </center>J'ai également une sauvegarde de mes scripts à la maison. J'ai tenté de les remettre en place, mais rien !? Cela peut-il venir du serveur de Free ???
-
Bonjour,
Est-ce que mysqli est bien installé ?
https://stackoverflow.com/questions/25281467/fatal-error-call-to-undefined-function-mysqli-connect