2011-08-23 56 views
0

我想構建一個自定義的ActiveRecord類,並試圖返回一個對象的MySQL結果。該對象將是模型。 下面是我在做什麼:PHP - mysql_fetch_object類名不工作

while($object = mysql_fetch_object($result, $this->_model)) { 
    foreach($object as $key => $val) { 
    if($this->is_serialized($val)) $object->$key = unserialize($val); 
    } 
    $return_value[] = $object; 
} 

如果我做的結果的print_r(),我得到一個空類(沒有變量被設置或任何東西)。 這裏是我的模型:

class User extends ActiveRecord { 
    public $_hasOne = "Profile"; 

    public $_required = array('full_name', 'user_name', 'password', 'country'); 
    public $_unique = array('full_name', 'user_name'); 

} 

我想不出什麼我做錯了!

編輯:修復它到底。在我的Activerecord類的開始我有這樣的:

$fields = $this->query("SHOW COLUMNS FROM " . $this->_table); 
while($field = mysql_fetch_assoc($fields)) { 
    $this->_columns[] = $field['Field']; 
    $this->$field['Field'] = null; 
} 

這是設置所有值爲NULL! 一個愚蠢的錯誤。它現在:

$fields = $this->query("SHOW COLUMNS FROM " . $this->_table); 
while($field = mysql_fetch_assoc($fields)) { 
    $this->_columns[] = $field['Field']; 
    if(!isset($this->$field['Field'])) $this->$field['Field'] = null; 
} 
+0

它實際上是否返回某些內容?嘗試'var_dump(mysql_fetch_assoc);'。 – HyderA

回答

0

愚蠢的問題,但$this->_model是正確的(我附和這個值,這可能在一定程度上將得到解除警戒)。

之後,你的班級應該有與你想表示的列名稱相同的字段。所以:

class Foo 
{ 
    private $id; 
    public $val; 

    public function __toString(){ return "$this->id => $this->val"; } 
} 
mysql_connect('localhost','root',''); 
$q = mysql_query('SELECT 1 as id, 2 as val FROM DUAL'); 
$foo = mysql_fetch_object($q, 'Foo'); 
echo $foo; // 1 => 2 

接下來,你不能遍歷一個對象。您需要遍歷對象屬性:

foreach(get_object_vars($object) as $key => $val) { 
    if($this->is_serialized($val)) $object->$key = unserialize($val); 
} 
+0

1)是的。 $ this - > _ model是「User」。我回應並肯定,是的,這確實是「用戶」。 2)如果我覆蓋它,並將其設置爲「配置文件」,它的工作原理和設置值。 3)我試圖設置模型中的字段,並沒有什麼區別。 –

+0

難道這與用戶擴展Activerecord的事實有關嗎?由於mysql_fetch_object位於Activerecord類中。 –

+0

@Bradley由於我不知道你正在使用哪個ActiveRecord(ActiveRecord有一個ActiveRecord命名空間,但沒有這個名字的類),我不能說,但上面的代碼正在工作。 – cwallenpoole