2011-07-10 13 views
1

データベースからデータを選択しています。データベースフィールド名は、クラス変数名とまったく同じです。このデータを個別に指定せずにクラス変数に格納する方法はありますか?テーブルフィールド名がクラス変数名と同じ場合、MySQL selectからPHPクラス変数へ変数をより効率的に格納できますか?

//gets info about a specified file. 
    //chosen based on a supplied $fileId 
    function getFileInfo($fileId) 
    { 
     //select info from database 
     $sql = "SELECT id, companyId, url, name, contentType, fileSize, saved, retrieved 
       FROM files 
       WHERE id = $fileId"; 
     $results = $this->mysqli->query($sql); 
     $results = $results->fetch_object(); 

     //store info into class variables 
     $this->id = $results->id; 
     $this->companyId = $results->companyId; 
     $this->url = $results->url; 
     $this->name = $results->name; 
     $this->contentType = $results->contentType; 
     $this->fileSize = $results->fileSize; 
     $this->saved = $results->saved; 
     $this->retrieved = $results->retrieved; 
    } 
+0

これを行うmysqliメソッドを見つけるのは漠然としていますが、今見つけられません。 –

+1

@Brian 'mysqli_fetch_object'にはオプションのクラスargがありますが、それはコード例を見る文字列でなければなりません。私はそれが動作するとは思わない文字列でなければなりません。 –

答えて

1

私はこのアプローチを提案したい:

$nameMap = array(
    'id', 
    'companyId', 
    'url', 
    'name', 
    'contentType', 
    'fileSize', 
    'saved', 
    'retrieved', 
); 

foreach($nameMap as $attributeName) { 
    $this->$attributeName = $results->$attributeName ; 
} 

1の結果は完全にバッキングテーブルの構造に依存

foreach($result as $var => $value) { 
... 
} 

を書くことができますが。表に属性を追加すると、コードが壊れることがあります。

$nameMapを使用すると、アプリケーションは引き続き動作します。

2

間に合わせの道だろうBAループ:

foreach($result as $var => $value) { 
    $this->$var = $value; 
} 
+0

+1は同じ答えに私を打ち負かします。 –

1

ちょうどforeach構造を使用します。

foreach ($result as $column => $value) { 
    $this->$column = $value; 
} 

はないいいが動作します。

1

ハム。

<?php 
try { 
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$sth->execute(); 

$result = $sth->fetch(PDO::FETCH_OBJ); 
print $result->NAME; 

私が見つけた最大の欠点は、PDOは、PHPのマシンとの間でSSL接続をサポートしていないということです:まあ、PDOはあなたには、いくつかの理由でmysqliのと結婚していないのであれば、そのためのネイティブ機能を持っていますMySQLマシン。

+0

明るい面では、同じマシン上でデータベースサーバーとWebサーバーを実行するのはかなり一般的です。そのため、常に問題はありません。 –

+0

@Sam Dufel真。しかし、まだ言及する価値がある。 –

関連する問題