2009-04-22 6 views
1

J'ai le problème suivant:résultat Col de mysql_fetch_object() à une fonction ne fonctionne pas

public function row2Partner($row){ 
    echo $row->PartnerID; 
} 

public function main(){ 
    $query = "SELECT PartnerID, PartnerName FROM Partner"; 
    $result = mysql_query($query); 
    $this->row2Partner(mysql_fetch_object($result)); 
} 

Cela me donne l'erreur r ow2Partner(): Essayer d'obtenir la propriété de non-objet

Mais $row est un objet! Et si je fais echo $row->PartnerID dans la fonction principale, cela fonctionne.

Des idées?

Thx, Martin

Répondre

1

Si votre résultat retourne plus d'une ligne, votre objet va être multidimensionnel. Je suis sûr que vous pouvez faire quelque chose comme ça si vous voulez juste faire écho à la première:

Si vous êtes à la recherche d'un seul résultat, je limiterais aussi ma requête à un seul ...

SELECT PartnerID, PartnerName FROM Partner LIMIT 1 

Si vous voulez faire écho à toutes vos lignes (dans le cas de plusieurs) résultats, vous pouvez le faire:

public function row2Partner($row){ 
    foreach($row as $result) { 
     echo $result->PartnerID; 
    } 
} 

espoir qui aide.

PS Tout comme sidenote, je tendance à aimer utiliser des tableaux associatifs lorsqu'ils traitent avec des résultats MySQL - il est tout simplement plus de sens pour moi. Dans ce cas, vous suffit de faire ceci:

mysql_fetch_assoc($result) 
+0

semble bon. Cela fonctionne très bien - j'ai eu le problème que la fonction a été appelée deux fois, une fois avec des données $ row valides, une fois avec une valeur vide. Merci beaucoup pour la réponse rapide. –

0

Êtes-vous sûr que mysql_query() a exécuté avec succès la requête, et aussi qu'il ya effectivement une rangée retournée? Il pourrait être utile de le vérifier, par ex.

//check query executed ok 
if ($result = mysql_query($query)) { 
    //check there is actually a row 
    if ($row = mysql_fetch_object($result)) { 
     $this->row2Partner($row); 
    } else { 
     //no data 
    } 
} else { 
    //error 
    die(mysql_error()); 
} 
0

La meilleure chose que je puisse penser est que vous pourriez avoir besoin de passer par référence plutôt que par valeur. Changer votre déclaration de fonction à

public function row2Partner(&$row) 

Espoir qui aide, David

Questions connexes