如何使用php oop从mysql显示多行?

时间:2014-10-13 11:30:40

标签: php mysql oop

我是oop风格的新手。我从上周开始练习它,我制作简单的CRUD网站。但是当我尝试从mysql db中获取行时,我遇到了一个问题,它始终显示1行。

我创建了一个名为class.user.php的类

,它显示在这里:

include "db_config.php";

class User{


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

        }
        private function connect($db_connect=true){ 
            if ($db_connect){
                $this->db = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
                if(mysqli_connect_errno()) {        
                    printf("DB Connect failed: %s\n", mysqli_connect_error());
                    exit;
            }
        }       
    }
    public function get_tutoriallist(){
        $db = $this->db;
        if(empty($db)){
            $this->connect();
            $db = $this->db;
        }
        try {

            $stmt = $this->db->prepare('SELECT * FROM `topic`');
            $stmt->execute();
            $result = $stmt->get_result();
            $dataArray = array();
            while($row = $result->fetch_assoc()){
                $count_row = $result->num_rows;
                if ($count_row == 1) {
                $dataArray[] = $row;
                }
            }
            return ($dataArray);

            mysqli_close($db);
            $this->db = null;   
        } catch (Exception $e) {
            echo $e->errorMessage();
        }

    }
}

我用它来称呼它:

$data = $user->get_tutoriallist(); 
                        if (!empty($data)) {
                            foreach ($data as $row){    
                                echo "<tr>";    
                                echo"<td>".$row['category']."</td>";
                                echo"<td>".$row['title']."</td>";
                                echo"<td>".$row['detail']."</td>";
                                echo"<td>".$row['photo']."</td>";
                                echo"<td>".$row['video_link']."</td>";
                                echo"<td>".$row['date_post']."</td>";
                                echo"<td class='option'><center><a href ='#' class='edit'>Edit</a>
                                    &nbsp;<a href='#'>Delete</a></center></td>";                                    
                                echo "</tr>";
                            }
                        }else{
                                echo '<tr><td colspan="6"><center><h2>No entries</h2></center></td></tr>';
                        }

2 个答案:

答案 0 :(得分:0)

这是因为仅在$current_row == 1时才附加到结果数组。

尝试更改你的while循环:

while($row = $result->fetch_assoc()){
    $dataArray[] = $row;
}

此外,您没有正确关闭数据库连接,您正在将OOP样式与过程mysqli函数混合使用。这应该是这样的:

$this->db->close();
$this->db = null;

最后,在关闭连接后应该返回数据数组。如果您先返回数据数组并在之后关闭连接,则该代码将不会执行。

所以你的最后三行应该是这样的:

$this->db->close();
$this->db = null;
return $dataArray;

答案 1 :(得分:0)

我不太确定这里发生了什么:

        while($row = $result->fetch_assoc()){
            $count_row = $result->num_rows;
            if ($count_row == 1) {
            $dataArray[] = $row;
            }

但通常情况下,您只需遍历结果并将它们附加到数组中:

        while($row = $result->fetch_assoc()){
            $dataArray[] = $row;
            }

然后你的$datArray包含了所有行。