当表字段名称与类变量名称相同时,从MySQL中存储变量选择更有效的PHP类变量?

时间:2011-07-10 18:45:18

标签: php oop mysqli

我从数据库中选择数据。数据库字段名称与类变量名称完全相同。有没有办法将这些数据存储到类变量中,而无需单独指定每个数据?

    //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;
    }

4 个答案:

答案 0 :(得分:2)

快速而肮脏的方式会成为一个循环:

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

答案 1 :(得分:1)

只需使用foreach结构:

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

不好但会奏效。

答案 2 :(得分:1)

姆。好吧,如果你因为某些原因没有和mysqli结婚,那么PDO就具有原生功能:

<?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机器和MySQL机器之间的SSL连接。

答案 3 :(得分:1)

我建议采用这种方法:

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

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

虽然可以写

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

结果完全取决于支持表的结构。如果向表中添加更多属性,则代码可能会中断。

使用$nameMap,应用程序仍然有效。