是否有更优雅的方式来格式化PHP中的MySQL结果?

时间:2013-08-06 14:29:09

标签: php mysql foreach

经过几年的开发,我才问自己,如果有一种更优雅的方式将MySQL结果格式化为下面的关联数组。

这里有一些虚拟代码,显示我通常如何做。

$sql = 'SELECT field1, field2 FROM sample_table';
$res = $db->prepare($sql)->getAll();
$formatted = array();

foreach ($res as $row) {
    $formatted[$row['field1']] = $row['field2'];
}

由于我经常这样做,我问自己是否有更优雅或更快的方式。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以创建一个类来处理重复性任务。想法是封装 以后可以使用最少量的代码重用的行为。这是一个基本的例子。 请记住,您可能希望委托数据库内容(连接,查询等) 去另一个班级。另请注意,此类特定于具有键值的数组 对(用于具有2列的查询)。

<?php

//Takes a two columns SQL query and format it to optain an array with key-value pair
class queryToMap{

    private $formattedArray = array();  //The formated array


    //Execute the query and format the array
    public function executeQuery($sql){

        $res = $this->dbQuery($sql);

        while($row = $res->fetch_array()){

            $this->formattedArray[$row[0]] = $row[1];

        }
    }

    //Returns the formated array
    public function getArray(){
        return $this->formattedArray;
    }

    //Execute query and return the result
    private function dbQuery($sql){
        //DB connection...
        $db = new mysqli("localhost", "bob", "123", "db");


        //if the query is based on user input, better use prepared statement 
        $res = $db->query($sql);

        return $res;
    }


}


//Use of the class
$a = new queryToMap();
$a->executeQuery("SELECT F_CUST_ID, F_CUST_NAME FROM TP_CUSTOMER");

//Output the array
var_dump($a->getArray());