使用singleton设计模式获取数据库数据


fetch database data with singleton design pattern

我使用单例设计模式连接到数据库。在下面,我对我的数据库运行了一个查询,我想从这个查询中获取数据:

$db = Db::connect();
$query = $db->query("SELECT * FROM myTable");
while ($row = ???) {
// echo 'myTable' fields here. like = echo $row['someField']
}

我的Db类:

class Db
{
    private $connection;
    private static $instance;
    private function __construct()
    {
        $host = "localhost";
        $user = "root";
        $pass = "";
        $name = "dictionary";
        $this->connection = new mysqli($host, $user, $pass, $name);
    }
    public static function connect()
    {
        if (self::$instance == null) {
            self::$instance = new Db();
        }
        return self::$instance;
    }
    public function query($sql)
    {
        $result = $this->connection->query($sql);
        $records = array();
        while ($row = $result->fetch_assoc()) {
            $records[] = $row;
        }
        return $records;
    }
}

我应该在代码中写什么而不是???

更换

while ($row = ???) {
    // echo 'myTable' fields here. like = echo $row['someField']
}

带有

foreach($query as $row)
    echo $row['someField'];

注意:例如,您可能需要将$query重命名为$rows,因为这是一个更合适的名称。

while循环的每次迭代中,使用array_shift()函数从结果集中获取当前行,如下所示:

while ($row = array_shift($query)) {
    echo $row['someField'] . "<br />";
}

以下是参考资料:

  • array_shift()

对Database类的->query()方法的调用返回一个结果行数组。所以你所需要做的就是像处理其他一样处理这个数组

$db = Db::connect();
$rows = $db->query("SELECT * FROM myTable");
foreach ($rows as $row ) {
   echo $row['someField'];
}