Equivalemnt Mysqli de mysql_fetch_array

Résolu/Fermé
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
-
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
-
Bonjour,

Voici une requête MysQl dont je ne suis pas peu fier, et pour cause il fonctionne à merveille...

$req1="SELECT titre, nom, email FROM oc_clients WHERE code_client ='".$code_client."'"; 
$resultat1=mysql_query($req1) or die ("Pb avec la requette ".mysql_error());
$row=mysql_fetch_array($resultat1);
$titre=$row['titre'];
$nom=$row['nom'];
$email=$row['email'];


Je me casse les dents sur l'équivalent MysQli.

Je propose le code suivant qui ne veut RIEN entendre :
 $sql2 ="SELECT titre, nom, FROM mr_clients WHERE code_client ='".$client_id."'"; 
      $res2 = $conn->query($sql2);
      
 $resultat1=mysqli_query($res2);
 $row=mysqli_fetch_array($resultat1);
 $titre=$row['titre'];
 $nom=$row['nom'];
 $email=$row['email'];



Merci de votre aide précieuse.
cdlt

9 réponses

Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
Bonjour
Tu as fais la connexion à ta bdd de quelle manière ? (Façon objet ou procedurale)?


Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Bonjour,

Euh ! procédurale je crois :

if($conn = mysqli_connect('localhost', '******', '', '******'))
{
}
else
{
    echo 'Erreur !';
}
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
Donc que vient faire la ligne :
  $res2 = $conn->query($sql2);
?

Ensuite, pour les différentes instructions (telle que le fetch_array..) il suffit de regarder le manuel php :
https://www.php.net/manual/fr/mysqli-result.fetch-array.php
Regarder la section : Exemple #2 Style procédural
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Je te remercie, Jordane45,
figure toi que c en désespoir de cause que je viens ici.

J'aime bien le "il suffit"; car je suis déjà allé dans la bible, mais sans étude de liturgie, beaucoup de passages restent incompris du pékin de base...

J'ai besoin de récupérer les variables, j'ai testé les différentes solutions qui me sont proposées ci-dessus, et je n'ai que des résultats d'erreur :


/* Tableau numérique */
$row = mysqli_fetch_array($result, MYSQLI_NUM);
printf ("%s (%s)\n", $row[0], $row[1]);

/* Tableau associatif */
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);

/* Tableau associatif et numérique */
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
printf ("%s (%s)\n", $row[0], $row["CountryCode"]);

/* Libération des résultats */
mysqli_free_result($result);

/* Fermeture de la connexion */
mysqli_close($link);


J'ai tenté ça selon la bible, ça ne donne rien :

 $result ="SELECT titre, nom, FROM mr_clients WHERE client_id ='".$client_id."'"; 
 $res1 = mysqli_query($link, $result );
 
 /* Tableau associatif */
 $row = mysqli_fetch_array($res1, MYSQLI_ASSOC);
 printf ("%s (%s)\n", $row["titre"], $row["nom"]);
 
 /* Libération des résultats */
 mysqli_free_res1($res1);
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
Quand tu as un (ou plusieurs ) messages d'erreur... il serait bien de le(s) donner... que l'on sache ce qu'il t'arrive exactement....

Ensuite... tu as, dans les exemples de code la variable $link .... celle-ci correspond à ta variable $conn de ta connexion.....

Je t'invite à nous poster l'intégralité de ton code actuel + nous préciser les messages d'erreurs ( complets !! ) que tu rencontres.
C'est seulement à partir de ces données que nous pourrons t'aider.
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Je te remercie bcp de ton aide.

J'ai avant tout un problème : je ne suis même certain que ce soit le code qui réponde à mon besoin exprimé initialement. Je rappelle j'ai besoin de récupérer des variables pour m'en servir plus loin.

Selon la bible, voici ce que je propose : peut-on me dire si c le code approprié, même s'il y des erreurs ? :

 $result ="SELECT titre, nom, FROM mr_clients WHERE client_id ='".$client_id."'"; 
 $res1 = mysqli_query($conn, $result );
 
 /* Tableau associatif */
 $row = mysqli_fetch_array($res1, MYSQLI_ASSOC);
 printf ("%s (%s)\n", $row["titre"], $row["nom"]);
 
 /* Libération des résultats */
 mysqli_free_res1($res1);



Voilà ce que j'obtiens comme erreur :

Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Je viens de détecter une erreur dans "select" il y a une virgule après "nom".

Une fois corrigée, je n'ai que ce message d'erreur :

Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
Le message d'erreur est clair :
ligne 295 de ton fichier php ... La fonction mysqli_free_res1 est inconnue ......
La bonne syntaxe est : mysqli_free_result
https://www.php.net/manual/fr/mysqli-result.free.php
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Merci.

La formule corrigée n'affiche plus aucune erreur :

	$result ="SELECT titre, nom FROM mr_clients WHERE client_id ='".$client_id."'"; 
	$res1 = mysqli_query($conn, $result);
	
	/* Tableau associatif */
	$row = mysqli_fetch_array($res1, MYSQLI_ASSOC);
	printf ("%s (%s)\n", $row["titre"], $row["nom"]);
	
	/* Libération des résultats */
	mysqli_free_result($res1);


MAIS ma question demeure :

comment récupérer les variables $titre et $nom , puisque là je n'arrive pas à les récupérer pour m'en servir plus loin ?

Avec Mysql ma formule initiale (voir début du post), me le permettait, là comment faire avec Mysqli ?

Merci de vos lumières.
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000
De la même façon que tu les utlises dans ta ligne de code :
printf ("%s (%s)\n", $row["titre"], $row["nom"]);

ou même dans ton précédent code (celui en version mysql )
...


Les données sont stockées dans un array ( $row)
donc tes variables sont :
 $titre = $row["titre"]; 
$nom =  $row["nom"];


Ne le prend pas mal ... mais ..... c'est un peu le b.a.ba de la programmation... savoir manipuler les différents types de variables.
Si tu ne connais pas, je pense que tu devrais commencer par reprendre les bases de la programmation PHP avant d'essayer de poursuivre ton dev actuel. Tu as trop de lacunes pour pouvoir correctement avancer;......
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
MErci bcp.

je ne le prends pas mal.

Figure toi que j'ai passé des nuits et des nuits à tenter d'apprivoiser MysQl, et voila que l'on me dit que maintenant c... MysQli.

J'adore bidouiller, mais je n'ai gère le temps de RE-devenir programmateur averti. Je n'ai pas encore eu trop le temps de m'y remettre en nuits blanches, d'autant que c tout de suite de j'ai le problème.

Merci pour ton aide précieuse, je vérifie tout cela.
Messages postés
34713
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 janvier 2022
4 000

Figure toi que j'ai passé des nuits et des nuits à tenter d'apprivoiser MysQl, et voila que l'on me dit que maintenant c... MysQli.

Il n'y a pas de grosses différences entre les deux.
La syntaxe des fonctions mysql change un peu ( on ajoute un "i" et on passe parfois, pour certaines instructions, la connexion ($con dans ton exemple)).
Sinon, le reste du code fonctionne à l'identique (surtout au niveau PHP/html/css ).


mais je n'ai gère le temps de RE-devenir programmateur averti. Je n'ai pas encore eu trop le temps de m'y remettre en nuits blanches

Un programmateur.. c'est pratique.. surtout la nuit ... pour commander les heures de déclenchement de lumières electriques ou de la machine à laver...
Un programmeur... c'est mieux (pour coder..).

Bon... j'arrête de te charier. :-)
Bonne soirée.

Et n'hésite pas à revenir si tu as d'autres soucis/questions.
J'essaierai d'être un peu moins "brut" dans ma façon re répondre.

PS: Si cette question est résolue, merci de ne pas oublier de mettre le sujet en "RESOLU". (lien qui se trouve sous le titre de ta question tout en haut..)

@++

Cordialement,
Jordane.
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
j'aime charrier aussi à mon tour. MErci en tout cas.

Je suis dessus, dès que ça marche je ne manquerai pas de le signaler.

A+
Messages postés
372
Date d'inscription
jeudi 10 mai 2007
Statut
Membre
Dernière intervention
11 mars 2020
5
Aux forceps :))

 $sql2 ="SELECT titre, nom FROM mr_clients WHERE client_id ='".$client_id."'"; 

 $res1 = mysqli_query($conn, $sql2);
 
 /* Tableau associatif */
 $row = mysqli_fetch_array($res1, MYSQLI_ASSOC);

 $titre=$row['titre'];
 $nom=$row['nom'];

 /* Libération des résultats */
 mysqli_free_result($res1);



A optimiser peut être, mais en tout cas ça marche.

Merci Jordane45