2013-08-06 4 views
1

Я просто спросил себя, после нескольких лет разработки, если есть более элегантный способ форматирования результатов MySQL в ассоциативные массивы, подобные приведенным ниже.Есть ли более элегантный способ форматирования MySQL в PHP?

Вот какой фиктивный код, который показывает, как я обычно это делаю.

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

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

Как я часто делаю подобные вещи, я спросил себя, есть ли более элегантный или быстрый способ.

Спасибо!

+0

Создание объектов, которые могут быть созданы или легко заполнены, например. функцию 'read_result_row ($ row)' и позволяют обрабатывать тяжелый подъем. – AmazingDreams

ответ

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()); 
+0

Спасибо Пьер! Я думал об этом, хотя этот подход для меня недостаточно динамичен. Я думал, что, возможно, есть некоторая поддержка со стороны, чтобы сделать это легче, но, вероятно, нет! (: – Rob

Смежные вопросы