2013-04-28 5 views
2

Я создал функцию класса, которая будет получать строки из таблицы в моей базе данных вместе с необязательным аргументом. Это работает при получении одной строки, но я не могу заставить ее работать, когда возвращаются несколько строк.Получение строк с использованием PHP OO Class

Вот что в классе пользователей

public function getUsers($filter="") { 
    $Database = new Database(); 
    if($filter == 'male') 
     $extra = "WHERE gender = 'm'"; 

    $sql = "SELECT * 
      FROM users 
      $extra"; 

    if ($Database->query($sql)) 
     return $Database->result->fetch_assoc(); 
    else 
     return false; 
} 

Класс Database

class Database { 

    private $db = array(); 
    private $connection; 
    private $result; 

    public function __construct() { 
     $this->connect(); 
    } 

    public function connect() { 
     $this->connection = mysqli_connect('mysql.com', 'username', 'pass'); 
     mysqli_select_db($this->connection, 'database'); 
    } 

    public function query($sql) { 
     $this->result = mysqli_query($this->connection, $sql); 
     return $this->result; 
    } 

Это код, который используется, чтобы попытаться отобразить строки

if ($student = $User->getUsers($filter)) { 

    echo "<table>\n"; 
    echo "<tr><td>Col 1</td><td>Col 2</td><td>Col 3</td><td>Col 4</td><td></td><td></td></tr>"; 

    foreach($student as $row) {  
     echo "<tr>"; 
     echo "<td>$row[col1]</td>"; 
     echo "<td>$row[col2]</td>"; 
     echo "<td>$row[col3]</td>"; 
     echo "<td>$row[col4]</td>"; 
     echo "<td>$row[col5]</td>"; 
     echo "<td>$row[col6]</td>"; 
     echo "</tr>\n";   
    } 

    echo "</table>";   
    } 

(Я обучение OO PHP, нести меня)

ответ

0

Я все еще учусь ООП, но я использовал это:

protected $connection, $result, $_numRows; 

    public function query($sql) 
    { 
    $this->result = mysql_query($sql, $this->connection); 
    $this->_numRows = mysql_num_rows($this->result); 
    } 


    /* 
    * @desc get result af query 
    * 
    * @returns string $result 
    */ 
    public function getResult() 
    { 
    return $this->result; 
    } 

    /* 
    * @desc  Return rows in table 
    * @returns int $_numRows 
    */ 
    public function numRows() 
    { 
    return $this->_numRows; 
    } 

    /* 
    * @desc  Count rows and add to array 
    * @return string $rows array 
    */ 
    public function rows() 
    { 
    $rows =array(); 
    for ($x=0; $x < $this->numRows(); $x++) { 
     $rows[] = mysql_fetch_assoc($this->result); 
    } 
    return $rows; 
    } 

Тогда вы могли бы использовать что-то вроде этого, чтобы получить строки:

public function getUsers($filter="") { 
    $Database = new Database(); 
    if($filter == 'male') 
     $extra = "WHERE gender = 'm'"; 

    $sql = "SELECT * 
      FROM users 
      $extra"; 
     if ($this->numRows() == 0) { 
      echo "No rows found"; 
     } else { 

     foreach ($this->rows() as $b) { 
      $c = array('something' => $b['col']); 
     } 
     return $c; 
    } 

Изменить последнюю часть в соответствии с вашими потребностями ,

+0

@Imran Я добавил код выше. Я не знаю, если вы его работаете, но теперь код завершен. Я немного устал, когда писал это вчера. Удачи – Bolli

0

Не ясно, в вашем коде, где $result происходит от ...

Вы должны вызвать метод FETCH_ASSOC() объекта возвращаемый:

$mysqli->query($query) 
+0

Извините, результат $ неверен, он ничего не ведет. У меня есть класс базы данных для запросов, поэтому использование $ Database-> query вместо $ mysqli. – Imran

+0

Пожалуйста, уберите код и, возможно, покажите нам, что ваш класс базы данных поможет найти проблему ... – rantanplan

+0

Что означает 'print_r ($ student)' say? – rantanplan

0

Почему вы используете $result->fetch_assoc() дважды? вы возвращаете массив. Вы должны иметь дело с $student.

+0

Извините, я должен был отредактировать оператор while, там не должно было быть другого $ result-> fetch_assoc(). Я пробовал foreach ($ student как $ row), но это не работает. – Imran

+0

fetch_assoc() возвращает только одну строку при каждом вызове. Поэтому вы должны называть его до тех пор, пока не будет больше строк: 'Возвращает ассоциативный массив, который соответствует выбранной строке или NULL, если больше нет строк. ' – rantanplan

Смежные вопросы