PHP - mysql_fetch_object с именем класса не работает - PullRequest
0 голосов
/ 23 августа 2011

Я пытаюсь создать собственный класс ActiveRecord и пытаюсь вернуть результаты MySQL в объекте.Объект будет моделью.Вот что я делаю:

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

1 Ответ

0 голосов
/ 23 августа 2011

Глупый вопрос, но $this->_model - это "User" правильно (я бы повторил это значение, оно могло бы быть как-то сброшено).

После этого ваш класс должен иметь поля с такими же именами, какстолбцы, которые вы хотите представить.Итак:

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