尝试将数组从一个类传递到另一个类

时间:2010-09-21 19:35:58

标签: php oop class

我是OOP的新手,我正试图抓住它。我要做的是返回表中的所有数据。现在只有2行,但我不知道如何将所有数据放入数组中,然后将其一直返回到$ results变量。

请帮忙。

<?php
include('dates.php');

$events = new dates();
echo $events->getNumberEvents(); <-----returns the number of rows in the table (Works as expected)

$results = $events->getRows(); <------Doesn't work.

?>

日期等级

<?php
/********************************************
* Class to connect and get dates from a database 
*********************************************/
require 'phpDatabaseClass.php';

class dates{

    private $db;
    private $arr2 = array();

    /****************************
    * Constructor which creates the $db variable
    ****************************/
    function __construct() 
    {
        $this->db = new phpDatabaseClass();
    }   

    /****************************
    * Function which calls the database class and returns the number of rows
    ****************************/
    public function getNumberEvents()
    {   
        $sql = "select count(*) from events";           
        return $this->db->queryNumber($sql);
    }

    /****************************
    * Function which calls the database class and returns the actual rows
    ****************************/
    public function getRows() 
    {
        $sql = "select * from events";

        $this->arr2 = $this->db->queryString($sql);

        foreach($this->arr2 as $key=>$val)
        {
            //$this->arr2 = $val;
            //echo $val;    
        }

    }
}
?>

phpDatabaseClass

<?php
/********************************************
* Class to connect and query a mysql database 
*********************************************/
require 'config.php';

class phpDatabaseClass {

    private $db;
    private $arr = array();

    /****************************
    * Constructor function which makes the connection to the database
    ****************************/
    public function __construct()
    {
        try 
        {
            $this->db = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USERNAME, DB_PASSWORD);
        }
        catch(PDOexception $e)
        {
            echo 'Can\'t connect to database. Please contact the site administrator';
        }
    }

    /****************************
    * Function which returns the number of rows
    ****************************/
    public function queryNumber($sql)
    {                           
        $stmt = $this->db->prepare($sql);
        $stmt->execute();
        $resultsCount = $stmt->fetchColumn();

        return $resultsCount;
    }


    /****************************
    * Function which returns the data in the rows
    ****************************/
    public function queryString($sql)
    {                           
        $stmt = $this->db->prepare($sql);

        $stmt->execute();

        $results = $stmt->fetch(PDO::FETCH_ASSOC);

        foreach($results as $key=>$val)
        {
            $this->arr = $val;
            //echo $this->arr;
        }

        return array($this->arr);
    }
}
?>

1 个答案:

答案 0 :(得分:2)

public function getRows() 
{
    $sql = "select * from events";

    $this->arr2 = $this->db->queryString($sql);
    $return = array();
    foreach($this->arr2 as $key=>$val)
    {
        $return[$key] = $val;  
    }
    return $return;
}

如果你想在那个阶段做任何事情。只需返回即可:

return $this->db->queryString($sql);

回声做:

foreach($results as $result)
{

    echo $result->fieldname;

}

回应所有事情:

foreach($results as $result)
{
    foreach($result as $key => $value)
    {
        echo $key.': '.$value;
    }

}

作为对象而不是数组访问的原因是mysqli将行作为对象返回。