mysql php5.6 vs mysqli php7.2

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 09:15

Bonjour,
j(ai un site privé qui liste les adhérents de mon association, objectif: lister et afficher des statistiques en temps réel! Un outil extra pour remplir une demande de subvention.
Je suis hébergé chez 1&1, php5.6 abandonné, je passe obligatoirement en php7.2 recommandé par l hébergeur.
l'architecture de mon site html est ok, il s'affiche correctement mais il est incapable d’exécuter une requête, liste vide!
Suite à une recherche rapide, je modifie toutes mes requêtes sql via notepad.
le code actuel qui ne fonctionne pas sou php7.2
$conn = mysqli_connect('$host', '$username', '$password', '$dbname');	
function sitename ()
	{
	$req = "SELECT * FROM config_table";
	$res = $conn->query($req);
	$sitename = mysqli_fetch_array ($res);
		$association = $sitename['sitename'];
		$associationdescription = $sitename['sitedesc'];

    $html  ="        <div id='top'>";
    $html .="            <div class='head'>";
    $html .="                <h1 class='logo'><a href='index.php' title='$association'>$association</a></h1>";
    $html .="                <h2>$associationdescription</h2>";
    $html .="            </div>";
    $html .="        </div>	";

	echo "$html";

	}
tout est codé de la même façon, donc j'ai l'erreur suivante
Fatal error: Uncaught Error: Call to a member function query() on null in /homepages/***/function.php:44 Stack trace: #0 /homepages/***/header.php(11): sitename() #1 /homepages/36/d556955629/htdocs/zikablog/association/index.php(12): include('/homepages/...') #2 {main} thrown in /homepages/***/function.php on line 44
en ligne 44 j'ai
	$res = $conn->query($req);
voilà l'état du site actuel.
merci d'avance pour votre aide.
Franck
Modifié en dernier par zika1972 le 21 déc. 2018, 09:25, modifié 1 fois.

Eléphant du PHP | 385 Messages

21 déc. 2018, 09:25

Salut,

Peux tu faire un var_dump de $conn dans ta fonction et au moment de l'initialisation après ton new?

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 09:27

Salut,

Peux tu faire un var_dump de $conn dans ta fonction et au moment de l'initialisation après ton new?
merci pour ta réponse rapide,
je suis débutant, j'ai recopié il y a longtemps en php5, quel code veux tu que je teste exactement dans ma fonction :(

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 09:32

Salut,

Peux tu faire un var_dump de $conn dans ta fonction et au moment de l'initialisation après ton new?
ok, après une recherche rapide sur var_dump j'ai fait
var_dump($conn);
à la place de ma fonction et elle affiche
NULL

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 09:42

Dons mon fichier j'ai un include ("config.php"); qui contient mon $conn
serait ce une partie du problème?

Eléphant du PHP | 385 Messages

21 déc. 2018, 09:51

Le var_dump que tu as fait est dans la fonction ou au moment ou tu fais

Code : Tout sélectionner

$conn = mysqli_connect('$host', '$username', '$password', '$dbname');
?

Es-tu certains de tes informations de connexions?

Ajoute en dessous (trouvé sur la doc)

Code : Tout sélectionner

if (!$conn ) { echo "Error: Unable to connect to MySQL." . PHP_EOL; echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; exit; }
Pour voir le problème

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 09:55

ARF!!!!!
Je change de braquet!
je viens de tenter:
$con = mysqli_connect('$host', '$username', '$password', '$dbname');
		
//$con = mysqli_connect("localhost","my_user","my_password","my_db");

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
mon retour:
Failed to connect to MySQL: php_network_getaddresses: getaddrinfo failed: Name or service not known
que dois je en déduire?
appeler 1&1?

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 10:00

if (!$conn ) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}
Pour voir le problème
retour:
Error: Unable to connect to MySQL. Debugging errno: 2002 Debugging error: php_network_getaddresses: getaddrinfo failed: Name or service not known
je vérifie mes infos sql sur 1&1 tout de suite, mais ça fonctionnait avant le passage en php7
merci pour ton aide

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 10:27

OK, vérification des données, modification du mdp.
connexion établie à la bdd
retour à la case départ
erreur actuelle:
[quoteFatal error: Uncaught Error: Call to a member function query() on null in ... function.php on line 50[/quote]
ligne 50:
$res = $conn->query($req);
code de ma fonction:
	function sitename ()
	{

if (mysqli_connect_errno()) {
    die('<p>La connexion au serveur MySQL a échoué: '.mysqli_connect_error().'</p>');
} else {
    echo '<p>Connexion au serveur MySQL établie avec succès.</p >';
}	
	$req = "SELECT * FROM config_table";
	$res = $conn->query($req);
	$sitename = mysqli_fetch_array ($res);
		$association = $sitename['sitename'];
		$associationdescription = $sitename['sitedesc'];

    $html  ="        <div id='top'>";
    $html .="            <div class='head'>";
    $html .="                <h1 class='logo'><a href='index.php' title='$association'>$association</a></h1>";
    $html .="                <h2>$associationdescription</h2>";
    $html .="            </div>";
    $html .="        </div>	";

	echo "$html";

	}
j'ai trouvé un lien qui devait m'aider à coder les nouvelles requetes, le lien -> https://www.linuxtricks.fr/wiki/php-pas ... es-de-base

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 déc. 2018, 10:35

Call to a member function query() on null
Ce message d'erreur veut dire que tu fais un appel à query() sur un objet inexistant :arrow: Donc que ta connexion à la bdd a échouée.

Si tu n'as pas modifié ton code de connexion précédent, tu as un problème de variables qui ne devrait pas être entre guillemets
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 10:51

Vu que je suis un boulet je cherche avec mes armes:
j'ai un include config.php avec
$conn = mysqli_connect($host_name, $user_name, $password, $database);
si je passe par dessus, je colle ma connexion dans la fonction j'ai un affichage propre mais sans la liste, retour au point de départ mais sans erreur apparente.
si je laisse l'include, le site me dit que je suis connecté (peut être à tort?) et une erreur en ligne 50 de fonction.php
je suis paumé

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 11:08

Si tu n'as pas modifié ton code de connexion précédent, tu as un problème de variables qui ne devrait pas être entre guillemets
J'utilise le code fourni par 1&1 mysqli, copier/coller de la bdd sélectionnée.
j'essaie d'appliquer les lignes de https://www.notre-planete.info/PHP/cours_13.php en les adaptant à ma table mais toujours le même bug ligne 50

Eléphanteau du PHP | 10 Messages

21 déc. 2018, 11:21

Y A DU PROGRES!!!
si je colle dans ma fonction la connexion, la bdd affiche le nom du site
function sitename ()
{$mysqli = mysqli_connect($host_name, $user_name, $password, $database);
$requete = "SELECT * FROM config_table";
$resultat = $mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error);
$ligne = $resultat->fetch_assoc();
echo 'nom du site '.$ligne["sitename"].' description '.$ligne["sitedesc"]; 
}
affichage:
nom du site Association Zikadonf description Gestion des membres
visiblement le soucis est dans l'include?
ERRATUM
l'include n'a rien à voir, si je met la connexion hors de ma fonction l'erreur revient.
Si je met l'include dans chaque fonction le problème est résolu, mais je pense qu'il y a un autre moyen?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 déc. 2018, 14:36

Attention à la portée des variables.
Une variable (qui contient la connexion à ta bdd dans ton cas) définit en dehors d'une fonction, ne peut pas être appelé au sein de cette fonction sauf :
- si elle a été déclarée en global
- ou si elle est passée en paramètre
http://www.lephpfacile.com/cours/21-la- ... -variables
Quand tout le reste a échoué, lisez le mode d'emploi...