[RESOLU] Problème objet et fetch_field

Petit nouveau ! | 7 Messages

14 janv. 2016, 23:15

Bonjour à tous.

J'ai le message d'erreur suivant " Fatal error: Call to a member function fetch_field() on a non-object "

voici ma requête SQL :

Code : Tout sélectionner

$resultat = $mysqli->query("SELECT id_salle, ville, count(*)(SELECT d.id_commande, s.titre, s.ville, s.id_salle FROM salle s LEFT JOIN produit p ON s.id_salle = p.id_salle LEFT JOIN detail_commande d ON p.id_produit = d.id_produit WHERE id_commande IS NOT NULL) AS T GROUP BY id_salle LIMIT 0, 5");
Qui me sort pile poil ce que je veux comme info dans la console
Image


Et voici mon code PHP pour remettre un peu tout ça de façon lisible :

Code : Tout sélectionner

$contenu .= "<table> <tr>"; while ($colonne = $resultat2->fetch_field()) { $contenu .= '<th>' . $colonne->name . '</th>'; } while ($ligne = $resultat2->fetch_assoc()){ $contenu .= '<tr>'; foreach ($ligne as $information) { $contenu .= '<td>' . $information . '</td>'; } $contenu .= '</tr>'; } $contenu .= '</table>';
Je ne vois vraiment pourquoi (de mémoire....) j'ai toujours fait les mises en formes de cette manière.....

Merci de votre aide :D

Mammouth du PHP | 2703 Messages

14 janv. 2016, 23:45

$resultat = $mysqli->query
$resultat2->fetch_field()
si tout le code a été recopié alors l'erreur est normale.

Petit nouveau ! | 7 Messages

15 janv. 2016, 10:18

Bonjour,

Yes ça aurait pu être ça mais ce n'était qu'une "faute de frappe" faisant déjà une requête avec la variable $resultat plus haut dans la page j'me suis dit que peut-être en la changeant.... mais en fait nan.

Voici donc mon code qui donne toujours la même erreur

requête SQL

Code : Tout sélectionner

$resultat = $mysqli->query("SELECT id_salle, ville, count(*)(SELECT d.id_commande, s.titre, s.ville, s.id_salle FROM salle s LEFT JOIN produit p ON s.id_salle = p.id_salle LEFT JOIN detail_commande d ON p.id_produit = d.id_produit WHERE id_commande IS NOT NULL) AS T GROUP BY id_salle LIMIT 0, 5");
Script PHP

Code : Tout sélectionner

$contenu .= '<table> <tr>'; while ($colonne = $resultat->fetch_field()){ $contenu .= '<th>' . $colonne->name . '</th>'; } $contenu .='</tr>'; while ($ligne = $resultat->fetch_assoc()){ $contenu .= '<tr>'; foreach ($ligne as $information){ $contenu .= '<td>' . $information . '</td>'; } $contenu .= '</tr>'; } $contenu .= '</table>';
Et donc toujours le même message d'erreur :

Fatal error: Call to a member function fetch_field() on a non-object

ynx
Mammouth du PHP | 586 Messages

15 janv. 2016, 10:25

Salut,

Il faut toujours penser à gérer les éventuelles erreurs sql :
$resultat = $mysqli->query("...");

if (!$resultat) {
    printf("Message d'erreur : %s\n", $mysqli->error);
}
http://php.net/manual/fr/mysqli.error.php

Bonne journée

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 janv. 2016, 10:27

Bonjour,

A aucun moment tu ne vérifies le résultat de $mysqli->query() et le type ou la valeur de $resultat. Si la requête à généré une erreur, alors $resultat n'est pas un objet et il n'est pas possible de faire appel une méthode de celui-ci :)

En l'occurrence, ta requête SQL est erronée, à vue de nez je dirais qu'il manque un FROM quelque part ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

15 janv. 2016, 11:16

Bonjour,

Merci à tous pour vos réponses .

En effet le problème venait de la requête, et oui Ryle tu avais raison il manquait bien le FROM avant la parenthèse.

Voici la requête qui fonctionne :

Code : Tout sélectionner

SELECT t.id_salle, t.ville, count(*) FROM(SELECT d.id_commande, s.titre, s.ville, s.id_salle FROM salle s LEFT JOIN produit p ON s.id_salle = p.id_salle LEFT JOIN detail_commande d ON p.id_produit = d.id_produit WHERE id_commande IS NOT NULL) AS t GROUP BY id_salle LIMIT 0, 5
Encore un grand Merci à vous tous. :wink: