Mysql
 sql >> Base de données >  >> RDS >> Mysql

Résultats de la base de données sous forme d'objets ou de tableaux ?

J'ai toujours utilisé des objets - mais je ne mets pas les données directement à partir de la requête. En utilisant les fonctions 'set', je crée la mise en page et évite ainsi les problèmes de jointures et de collisions de noms. Dans le cas de votre exemple 'full_name', j'utiliserais probablement 'as' pour obtenir les parties du nom, définir chacun dans l'objet et proposer 'get_full_name' en tant que membre fn.

Si vous vous sentez ambitieux, vous pouvez ajouter toutes sortes de choses à 'get_age'. Définissez la date de naissance une fois et déchaînez-vous à partir de là.

EDIT :Il existe plusieurs façons de créer des objets à partir de vos données. Vous pouvez prédéfinir la classe et créer des objets ou vous pouvez les créer "à la volée".

--> Quelques exemples simplifiés -- si cela ne suffit pas, je peux en ajouter d'autres.

à la volée :

$conn = DBConnection::_getSubjectsDB();  
$query = "select * from studies where Status = 1";  
$st = $conn->prepare( $query );  

$st->execute();  
$rows = $st->fetchAll();  
foreach ( $rows as $row )  
{  
    $study = (object)array();  
    $study->StudyId = $row[ 'StudyId' ];  
    $study->Name = $row[ 'StudyName' ];  
    $study->Investigator = $row[ 'Investigator' ];  
    $study->StartDate = $row[ 'StartDate' ];  
    $study->EndDate = $row[ 'EndDate' ];  
    $study->IRB = $row[ 'IRB' ];  

    array_push( $ret, $study );  
} 

prédéfini :

/** Single location info
*/
class Location  
{  
    /** Name  
    * @var string  
    */  
    public $Name;  

    /** Address  
    * @var string  
    */  
    public $Address;  

    /** City  
    * @var string  
    */  
    public $City;

    /** State
    * @var string
    */
    public $State;

    /** Zip
    * @var string
    */
    public $Zip;

    /** getMailing
    * Get a 'mailing label' style output
    */
    function getMailing()
    {  
         return $Name . "\n" . $Address . "\n" . $City . "," . $State . "  " . $Zip;
    }
}

utilisation :

$conn = DBConnection::_getLocationsDB();  
$query = "select * from Locations where Status = 1";  
$st = $conn->prepare( $query );  

$st->execute();  
$rows = $st->fetchAll();  
foreach ( $rows as $row )  
{  
    $location = new Location();  
    $location->Name= $row[ 'Name' ];  
    $location->Address = $row[ 'Address ' ];  
    $location->City = $row[ 'City' ];  
    $location->State = $row[ 'State ' ];  
    $location->Zip = $row[ 'Zip ' ];  

    array_push( $ret, $location );  
} 

Plus tard, vous pouvez boucler sur $ret et générer des étiquettes de publipostage :

foreach( $ret as $location )
{ 
    echo $location->getMailing();
}