Сохранять переменные из MySQL лучше выбирать переменные класса 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; } 

Я бы предложил такой подход:

 $nameMap = array( 'id', 'companyId', 'url', 'name', 'contentType', 'fileSize', 'saved', 'retrieved', ); foreach( $nameMap as $attributeName ) { $this->$attributeName = $results->$attributeName ; } 

Хотя можно было написать

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

результат полностью зависит от структуры таблицы поддержки. Если вы добавите дополнительные атрибуты в таблицу, ваш код может сломаться.

Используя $nameMap , приложение все еще работает.

Быстрый и грязный путь был бы петлей:

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

Просто используйте структуру foreach :

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

Не приятно, но будет работать.

Хамм. Ну, PDO имеет собственные функции для этого, если вы почему-то не женаты на mysqli:

 <?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 не поддерживает SSL-соединения между машиной PHP и машиной MySQL.