我从数据库中选择数据。数据库字段名称与类变量名称完全相同。有没有办法将这些数据存储到类变量中,而无需单独指定每个数据?
//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 :(得分: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
,应用程序仍然有效。