Я выбираю данные из базы данных. Имена полей базы данных точно такие же, как имена переменных класса. Есть ли способ хранить эти данные в переменных класса без указания каждого из них отдельно?
//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.