Значения массива как свойства объекта с PDO - PullRequest
0 голосов
/ 08 января 2019

Я хочу сохранить значения массива как свойства объекта. Я следую примеру для MySQL, но я хочу использовать PDO вместо этого.

У меня есть класс пользователя:

class User {

public $id;
public $username;
public $password;
public $first_name;
public $last_name;

public static function find_all_users(){
    global $database;
    $result_set = $database->query($sql);
    return $result_set;
  } //end method
} //end User class

Я подключился к своей базе данных, используя следующий класс базы данных. Примечание: константы DB_SERVER и т. Д. Определены в другом месте и включены в файл

class Database{

public $connection;

function __construct(){
    $this->open_db_connection();
}//end of constructor

public function open_db_connection(){
   try{
      $this->connection = new PDO('mysql:host='. DB_SERVER .';dbname='. DB_NAME, DB_USER, DB_PASSWORD);
      $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   }catch(PDOException $e){
      echo 'Server Error: ' . $e->getCode(;
   }//end catch block
}//end of method    

public function query($sql){
    $stmt = $this->connection->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $result;
} //end query method

$database = new Database();

Я хочу создать объект из класса User и использовать свойства этого класса для доступа к моим данным.

$user = new User();
$user->id = $result_set['id'];
$user->username = $result_set['username'];
$user->password = $result_set['password'];
$user->first_name = $result_set['first_name'];
$user->last_name = $result_set['last_name'];
echo $user->id;

В mysqli это будет выполнено с помощью следующего:

public static function find_all_users(){
   global $database;
   $result_set = $database->query($sql);
   mysqli_fetch_array($result_set);
   return $result_set;
   } //end method

Я получаю ошибку «Неопределенный индекс: id» «Неопределенный индекс: имя пользователя» «Неопределенный индекс: пароль» «Неопределенный индекс: first_name» «Неопределенный индекс: фамилия»

Я думаю, что моя ошибка от fetchAll (PDO :: FETCH_ASSOC). Я должен получить значение из моего эхо-заявления. echo $ user-> id;

Что является лучшим методом выборки, который работает аналогично mysqli_fetch_array для PDO?

Ниже, когда я печатаю_r $ result_set:

print_r of $result_set

1 Ответ

0 голосов
/ 08 января 2019

fetchAll() возвращает двумерный массив. Вам нужно зациклить элементы:

$all_users = array();
foreach ($result_set as $result) {
    $user = new User();
    $user->id = $result['id'];
    $user->username = $result['username'];
    $user->password = $result['password'];
    $user->first_name = $result['first_name'];
    $user->last_name = $result['last_name'];
    $all_users[] = $user;
    echo $user->id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...