将mysql_fetch_object()的结果传递给函数不起作用

时间:2009-04-22 15:05:43

标签: php mysql

我有以下问题:

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));
}

这给了我r ow2Partner()中的错误: 试图获得非对象的属性

但是$row是一个对象!如果我这样做 在main函数中回显$row->PartnerID,它可以工作。

有什么想法吗?

THX, 马丁

3 个答案:

答案 0 :(得分:1)

如果您的结果返回多行,则您的对象将是多维的。如果你只想回应第一个问题,我很确定你可以做这样的事情:

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

如果您只查找一个结果,我也会将查询限制为仅一个...

SELECT PartnerID, PartnerName FROM Partner LIMIT 1

如果要回显所有行(如果是多个)结果,可以执行以下操作:

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

希望有所帮助。

<强> PS 就像旁注一样,我倾向于在处理MySQL结果时使用关联数组 - 这对我来说更有意义。在这种情况下,你只需要这样做:

mysql_fetch_assoc($result)

答案 1 :(得分:0)

你确定mysql_query()已经成功执行了查询,还有实际返回的行吗?可能值得检查一下,例如

//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());
}

答案 2 :(得分:0)

我能想到的最好的事情是你可能需要通过引用而不是值来传递。将您的函数声明更改为

public function row2Partner(&$row)

希望有所帮助, 大卫