2013-04-28 68 views
2

我已经创建了一个类函数,它将从我的数据库中的表中获取行以及可选参数。这工作时得到一个单行,但我无法得到这个工作时,多行返回。使用PHP OO提取行

下面是在用户类

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

数据库类

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

我还在学习OOP,但我已经使用这个:

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 2013-04-28 12:05:36

0

这不是在你的代码不清楚的地方$result来自...

你应该调用对象的FETCH_ASSOC()方法由归国:

$mysqli->query($query) 
+0

对不起,$结果是不正确的,它不会导致任何事情。我有一个数据库类的查询,因此使用$数据库 - >查询,而不是$ mysqli。 – Imran 2013-04-28 03:20:41

+0

请整理您的代码,也许向我们展示您的数据库类将帮助您找到问题... – rantanplan 2013-04-28 03:25:10

+0

'print_r($ student)'说什么? – rantanplan 2013-04-28 03:28:22

0

你为什么要使用$result->fetch_assoc()两次?你正在返回一个数组..你应该处理$student

+0

对不起,我应该编辑while语句,不应该有另一个$ result-> fetch_assoc()那里。我试过foreach($学生作为$行),但这是行不通的。 – Imran 2013-04-28 03:23:17

+0

fetch_assoc()每次调用时只返回一行。所以你必须调用它直到没有更多的行:'返回一个关联数组,对应于获取的行,或者如果没有更多行,则返回NULL。' – rantanplan 2013-04-28 11:51:51