php函数不返回类对象

问题描述:

我有一个DB类,我创建了几个函数来返回不同的值。其中一个函数返回(或应该是)代表应用程序登录用户的“用户”类对象。php函数不返回类对象

class user { 
    public $guid = ''; 
    public $fname = ''; 
    public $lname = ''; 

    public function __construct() {} 

    public function print_option() { 
     return "<option value='$this->guid'>$this->name</option>"; 
    } 
} 

在DB类,我有以下两个功能:

public function get_user($uid) { 
    $sql = ''; 
    $usr = new user(); 
    $sql = "SELECT guid, fname, lname FROM ms.users WHERE guid=?"; 

    if($sth = $this->conn->prepare($sql)) { 
     $sth->bind_param('s', $uid); 
     if($sth->execute()) { 
      $sth->bind_result($usr->guid, $usr->fname, $usr->lname); 
      $sth->fetch(); 
      print_r($usr); // PRINTS OUT CORRECTLY 
      return $usr; 
     } 
     else {return null;} 
    } 
    else {return null;} 
} 

public function get_practice_user_list($pguid) { 
    $ret = ''; 
    $sql = "SELECT user_guid FROM ms.perm WHERE p_guid=?"; 
    if($sth = $this->conn->prepare($sql)) { 
     $sth->bind_param('s', $pguid); 
     if($sth->execute()) { 
      $usr = new user(); 
      $guid = ''; 

      $sth->bind_result($guid); 
      while($sth->fetch()) { 
       print_r($guid); // PRINTS GUID correctly 
       $usr = $this->get_user($guid); 
       print_r($usr); // PRINTS NOTHING object is null so prints "error" two lines later. 
       if($usr != null) $ret .= $usr->print_option(); 
       else print "error"; 
      } 

      return $ret; 
     } 
     else {return null;} 
    } 
    else {return null;} 
} 

我只是不理解为什么“用户”的对象是不是在这种情况下返回。其他调用get_user函数的工作很好,并返回与该用户有关的用户类对象。

TIA

+1

你在调用哪个函数,返回的是什么? – ashes999 2013-05-10 01:24:41

+0

我以get_practice_user_list函数开始。现在它什么都不返回 – Slinky33 2013-05-10 01:27:17

+0

它必须返回一些东西,即使那是'null'。 – 2013-05-10 01:37:44

的问题是与查询。由于代码只是循环查询一个查询(get_practice_user_list),因此调用get_user函数并尝试第二个查询MySQL时返回了错误消息out of sync。当我查看时,我可以通过在第一个查询上执行fetch_all然后遍历该数组以获取用户来修复它。

我猜你的GUID可能是一个整数,所以

$sth->bind_param('s', $uid); 

bind_param的第一个参数应该是 '我' 而不是 'S';

http://www.php.net/manual/en/mysqli-stmt.bind-param.php

+0

不,它是一个字符串,用'uniqid()' – Slinky33 2013-05-10 03:48:48

+0

就像我说的那样,它填充在'get_user'函数,但是返回并不显示在'get_practice_user_list'中 – Slinky33 2013-05-10 03:49:34